私はスクリプティングに初めて触れ、これまで以下を作成しました。
#!/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]