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 に答える