2013-04-30 63 views
0

這是我正在努力完成的。我想運行一個循環,直到匹配一個字符串,執行do命令ONCE並繼續執行腳本的其餘部分?例如如何在bash中運行一個循環來匹配一個字符串並執行另一個命令ONCE

string=`tail /var/myapp/main.log|sort -k5 | awk '{print $4}'` 

while [ $string = "failed" ] do 
service restart myapp 
break 
done 
echo "blah blah blah as the rest of the script" 
echo "on and on" 

我試過使用,直到,但我懷疑這是一個。也許我沒有使用正確的命令。 「IF」將不起作用,因爲我想每天運行一次,直到找到我在特定時間要查找的內容,執行其操作,完成腳本的其餘部分並完成操作。無論我嘗試多少,它都會繼續......永遠循環。我只是想讓它做一次。

回答

1

你需要檢查範圍內的條件一個無限循環,當它滿足您的條件時便會爆發:

while true; do 
    string=$(tail /var/myapp/main.log|sort -k5 | awk '{print $4}') 
    [ $string = "failed" ] && break 
done 
service restart myapp 
echo "blah blah blah as the rest of the script" 
echo "on and on" 
+0

賓果!這工作...現在我知道爲什麼。太感謝了! – 2013-04-30 19:08:59

0
while sleep 1 
do 
    set $(tail /var/myapp/main.log | sort -k5 | awk '{print $4}') 
    [ $1 = failed ] || break 
done 

service restart myapp 
  • 循環每秒
  • 每次循環檢查,如果輸出等於failed
  • 如果不是failed再破
  • 休息腳本
+0

這裏的風險是,如果日誌很快與其他消息混雜在一起,並且「tail」看起來不夠遠,那麼您可能會失去「失敗」的消息。 – paddy 2013-04-30 03:23:12

+0

感謝您的幫助,但它沒有奏效。循環剛剛爆發,命令沒有執行。 – 2013-04-30 04:21:40

相關問題