1

次のスクリプトは、目的の出力を生成していますが、結果を /home/myuser/slavedelay.html にリダイレクトしていません。

#!/ビン/バッシュ

host=<ip>
echo $host
user=usr1
password=mypass
threshold=300
statusok=OK
statuscritical=CRITICAL

for i in ert7 ert9
do
echo "<html>" > /home/myuser/slavedelay.html

if [ "$i" == "ert7" ]; then
        slvdelay=`mysql  -u$user -p$password -h<ip> -S /backup/mysql/mysql.sock -e 'show slave status\G' | grep Seconds_Behind_Master | sed -e 's/ *Seconds_Behind_Master: //'`
         if [ $slvdelay -ge $threshold ]; then
                echo "<tr><td>$i</td><td>CRITICAL</td>"  >> /home/myuser/slavedelay.html
                echo "<tr><td>$i</td><td>CRITICAL</td>" 
        else
                echo "<tr><td>$i</td><td>OK</td>"  >> /home/myuser/slavedelay.html
                echo "<tr><td>$i</td><td>OK</td>"
         fi
fi
done
echo "</html>" >> /home/myuser/slavedelay.html

出力ファイル /home/myuser/slavedelay.html を cat すると、出力されます。

<html>
</html>

実行結果:

sh slave_delay.sh 
<tr><td>sdb7</td><td>OK</td>
4

2 に答える 2

2

ループのたびに、コマンドのために出力ファイルを空にしています

echo "<html>" > /home/myuser/slavedelay.html

したがって、最初の反復で<tr>行がファイルに書き込まれ、次の反復でファイルが上書きされ、$iisn't であるため、これらの行は書き込まれませんert7

次のように変更します。

for i in ert7 ert9
do
if [ "$i" == "ert7" ]; then
        echo "<html>" > /home/myuser/slavedelay.html
        slvdelay=`mysql  -u$user -p$password -h<ip> -S /backup/mysql/mysql.sock -e 'show slave status\G' | grep Seconds_Behind_Master | sed -e 's/ *Seconds_Behind_Master: //'`
         if [ $slvdelay -ge $threshold ]; then
                echo "<tr><td>$i</td><td>CRITICAL</td>"
        else
                echo "<tr><td>$i</td><td>OK</td>"
         fi | tee -a /home/myuser/slavedelay.html
        echo "</html>" >> /home/myuser/slavedelay.html
fi
done
于 2012-09-01T09:39:16.753 に答える
0

交換 :

if [ "$i" == "ert7" ];

と:

if [ "$i" = "ert7" ];

=テストでも演算子を使用します。

于 2012-09-01T09:17:59.497 に答える