2013-08-26 76 views
2

在Linux上使用sh我期待從多個if語句輸出結果到郵件消息。輸出多個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" [email protected] 

## current output is 
[[email protected] ~]# ./backup_script_daily.sh 
/sbin/zfs snapshot tank/[email protected]_12.28.22--30d ... DONE 
/sbin/zfs snapshot tank/[email protected]_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.

回答

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" [email protected] 
+0

謝謝,這是做到了。感謝迴應! – Eyr3

+0

我不得不在if語句中添加一個帶有換行符的printf,以使郵件更具可讀性:) – Eyr3

+0

好點:-)很高興幫助! –