#!/bin/ksh
#HOSTS format:
HOSTS="xxxx.xxx.xxx.xx-ACCOUNT"
FILE=/home/angela/list.txt #list will be saved on list.txt
date > $FILE
echo >> $FILE
for host in $HOSTS; do
ip=$(echo $host|cut -d '-' -f 1)
title=$(echo $host|cut -d '-' -f 2)
lsuser -a login ALL | grep '=true$' | awk '{ print $1 }' >/tmp/delta 2>/dev/null
echo "$title instance" >> $FILE
perl -e 'print "=" x 65,"\n"' >>$FILE
#we filter through unwanteduser.list to remove unwanted users
cat /tmp/delta|grep -wvf /home/angela/unwanteduser.list|sort >> $FILE
echo >> $FILE
done
rm -f /tmp/delta
mailx -r [email protected] -s "List of active Users and Locked users" [email protected] < "$FILE"
我正在尝试添加lsuser -a login ALL | grep '=false$' | awk '{ print $1 }'
将锁定帐户列表发送到上述脚本,并发送包含活动用户和锁定用户列表的电子邮件
目前的脚本给了我这个
Wed Oct 21 10:36:51 CDT 2015
Account instance
=================================================================
john
alex
raven
max
我想完成这个
Wed Oct 21 10:36:51 CDT 2015
list of Active users
Account instance
=================================================================
john
alex
raven
max
list of Locked users
Account instance
=================================================================
joe
tracy
karen
ben
到目前为止,我只能列出活跃用户。我尝试了下面的脚本,只是得到了没有任何输出的日期,但是它不符合我试图完成的格式
#!/bin/ksh
(
date
echo
for host in $HOSTS; do
echo "${host/*-} instance"cat
perl -e 'print "=" x 65,"\n"'
lsuser -a login ALL | awk '/=true$/ { print $1 }' | grep -wvf /home/angela/unwanted.list
lsuser -a login ALL | awk '/=false$/ { print $1 }' | grep -wvf /home/angela/unwanted.list
echo
done
) | mailx -r [email protected] -s "List of active Users and Locked users" [email protected]
答案1
如果您想将多个不同命令的输出一起邮寄到一条消息中,请不要使用临时文件,将命令分组并只需使用管道即可:
(
date
echo
for host in $HOSTS; do
echo "${host/*-} instance"
perl -e 'print "=" x 65,"\n"
lsuser -a login ALL | awk '/=true$/ { print $1 }' | grep -wvf /home/angela/unwanteduser.list
echo
done
) | mailx -r [email protected] -s "List of active Users and Locked users" [email protected]
(
..东西)
在单独的子 shell 进程中运行括号之间的命令,因此它的所有标准输出都可以通过管道连接在一起。
过滤可以在数据生成时完成,而不是在最后完成。
如果您awk
无论如何都在使用,则可以省略grep
管道的一部分,因为awk
它完全能够选择要自行处理的行。这样就少了一个流程,效率更高。
我还取消了临时“标题”变量,使用模式替换来删除 IP 地址(*-
不替换任何内容)。
我会拼出 65 个=
字符,因为调用 Perl 来执行此操作会导致相当大的开销。您不会注意到仅运行此脚本,但如果您养成了习惯并且有时编写这样一个每秒执行多次的脚本,那么您将要注意差异。