ユーザーリストスクリプト作成のサポート

ユーザーリストスクリプト作成のサポート

私はスクリプティングに初めて触れ、これまで以下を作成しました。

#!/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]

おすすめ記事