2012-09-01 57 views
1

下面的腳本生成所需放出來而不是重定向結果/home/myuser/slavedelay.html生成HTML shell腳本出來把

#!/斌/慶典

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它給。

<html> 
</html> 

執行結果:

sh slave_delay.sh 
<tr><td>sdb7</td><td>OK</td> 
+0

把outout文件名中的一個變量,所以你確定你不需要在它一個錯字(我猜你在發佈前編輯它,這可能是問題)。 – Mat

+0

嘗試仍然是相同的問題.. documentrottr =/home/myuser/slavedelay.html,到處documentroot用文件路徑替換 – user1638016

回答

0

替換:

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

有:

您在測試中也使用=運營商。

+0

第一個版本是正確的,比第二個更安全。 – Mat

+0

我試過了,但是隻有相同的結果。在控制檯它是正確的。但不會重定向到輸出文件(/home/myuser/slavedelay.html) – user1638016

+0

這是一個邏輯錯誤,echo「」> /home/myuser/slavedelay.html在for循環中給出。而是需要在循環之前給它。 – user1638016

2

通過你排空,因爲該命令的輸出文件的每次循環

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

所以第一次迭代<tr>行寫入文件,那麼下一次迭代覆蓋該文件,並且不寫這些行,因爲$i不是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