协助编写用户列表脚本

协助编写用户列表脚本

我是脚本编写新手,到目前为止我已经创建了这个:

#!/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通常用于搜索模式,但 with-v可用于否定搜索,从而用于过滤。匹配可能有点广泛(例如,joe将过滤掉joejoey),因此使用-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]

相关内容