저는 스크립팅을 처음 접했고 지금까지 다음을 만들었습니다.
#!/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]