2013-07-09 34 views
4

我遇到了我的bash腳本有點問題。我的腳本在其他方面正在啓動一個需要一些時間才能開始的服務器。爲了防止長時間的啓動,我已經放入了一個while循環來查詢服務器是否運行。Bash while while two string conditions

while [ $running -eq 0 ]; do 
echo "===" $response "==="; 
if [ "$response" == "" ] || [ "$response" == *"404 Not Found"* ]; then 
    sleep 1; 
    response=$(curl $ip:4502/libs/granite/core/content/login.html); 
else 
    running=1; 
fi 
done 

退出循環$ response等於「404」字符串。如果是這樣的話,那東西還是應該在循環中,不是嗎?似乎我的循環過早退出。

回答

6

[ .. ]不被水珠匹配。使用[[ .. ]]

if [ "$response" == "" ] || [[ "$response" == *"404 Not Found"* ]]; then 
+0

注意'[[]]'是一個bash的擴展,所以一定要確保腳本'#!/ bin中/ bash'開始,不是'#! /斌/ sh'。有很多方法可以在普通的POSIX shell語法中進行等效測試,但它們幾乎沒有那麼幹淨。 –

+0

謝謝你的回答,但即使你的修改,我仍然看到循環退出,而響應中有404字符串。 –

+0

@JoeAndolina只是一個想法 - 你有沒有證實這與另一個網站,肯定會給404? –

0

我不知道爲什麼我的原始腳本失敗。我認爲這與我與HTML進行比較的事實有關。爲了讓我的腳本工作,我使用字符串長度而不是內容來結束。使用下面的比較器可以讓所有的工作都能順利進行

if [ -z "$response" ] || [ ${#response} -lt 100 ]; then 

感謝您的幫助, 喬