사용자 목록 스크립트 작성 지원

사용자 목록 스크립트 작성 지원

저는 스크립팅을 처음 접했고 지금까지 다음을 만들었습니다.

#!/bin/sh
(
echo List of users in PRD 

echo $(date)

cat /etc/passwd | awk -F: '{print $1,$3,$5}' | sort | \
while read username uid gecos
do
echo "${username}:${uid}:${gecos}"
done
) > `hostname`_userlogins.txt
mailx -s file [email protected] < `hostname`_userlogins.txt

그러면 모든 사용자 목록이 제공됩니다. ignore.txt이메일을 보내기 전에 제외할 사용자 목록이 포함된 다른 파일( 이라는)이 있습니다 .

목록을 ignore.txt필터에 연결하는 방법은 무엇입니까?

답변1

grep다음을 사용하여 사용자 이름을 필터링 할 수 있습니다 .

grep -wvf ignore.txt /etc/passwd | awk ...

grep일반적으로 검색 패턴에 사용되지만 -v부정적인 검색 및 필터링에도 사용할 수 있습니다. 일치 항목이 약간 광범위할 수 있으므로(예: joe필터링됨 joe) joey전체 -w단어 일치로 효과 제한을 사용하세요.

다른 제안:

  • awk콜론을 사용하여 인쇄하도록 지시할 수 있으므로 반복 문제를 피할 수 있습니다.

    grep -wvf ignore.txt /etc/passwd | awk -F: -v OFS=: '{print $1, $2, $3}'
    
  • echo $(date)무의미한. 그냥 사용하세요 date.
  • tee파일에 쓰고 다시 파이프에 쓰는 경우 :

    ) | tee "$(hostname)"_userlogins.txt | mail ...
    

전반적으로 스크립트는 다음과 같이 단순화될 수 있습니다.

#!/bin/sh
(
echo List of users in PRD 

date

grep -wvf ignore.txt /etc/passwd | awk -F: -v OFS=: '{print $1,$3,$5}' | sort 
) | tee "$(hostname)"_userlogins.txt |
mailx -s file [email protected]

관련 정보