我是脚本编写新手,到目前为止我已经创建了这个:
#!/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
将过滤掉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]