2

在 linux 上使用 sh 我希望将多个 if 语句的结果输​​出到邮件消息中。

#snap server1
running=`ps -U server1 | wc -l`
if [ $running -eq 1 ]; then
        /root/zfsnap/zfSnap.sh -v -a 30d tank/server1
fi

#snap server2
running=`ps -U server2 | wc -l`
if [ $running -eq 1 ]; then
        /root/zfsnap/zfSnap.sh -v -a 30d tank/server2
fi

sleep 3 && echo "results of script" | mail -s "snapshot status" administrator@domain.local

## current output is 
[root@backupserver ~]# ./backup_script_daily.sh
/sbin/zfs snapshot  tank/server1@2013-08-26_12.28.22--30d ... DONE
/sbin/zfs snapshot  tank/server2@2013-08-26_12.28.22--30d ... DONE

我不确定如何为多个 if 语句执行此操作。我看过很多关于个别 if 语句的讨论。我实际上在这个脚本中还有大约 8 个(用户/服务器)。我多年来的脚本编写经验一直很低:)。使用 Perl 之类的东西会更好吗

put servers into array
for each server in array
run command > to text file
end and mail(textfile)

我感谢任何建议或想法,对于帖子中的任何问题,我深表歉意。这是我的第一个。

亲切的问候,

~乔恩·R。

4

1 回答 1

0

您可以将要捕获其输出的所有命令包含在一个{ }块中,并将整个内容通过管道传输到mail命令中,例如:

#!/bin/bash

{
    for server in server{1..2}; do
        if (( $(pgrep -U "${server}" 2>/dev/null | wc -l) > 0 )); then
            /root/zfsnap/zfSnap.sh -v -a 30d "tank/${server}"
        fi
    done
} | mail -s "snapshot status" administrator@domain.local
于 2013-08-27T06:43:28.653 回答