2017-06-13 109 views
0

所以我來檢查一下腳本的退出代碼是這個if語句:如何在while循環中更新「全局」變量?

if [ $? -eq 0 ]; then 
    wasSuccessful=true; 
fi 

在其他語言中,我會做這樣的事情:

while wasSuccessful == false 

然後循環將繼續運行直到退出代碼爲真。 (我計劃實現一個循環計數器以及太多失敗的嘗試,但這是一個不同的問題來解決)

我想我需要一個這裏字符串,但我不完全確定如何看起來。下面是我的代碼粗線條的,現在,在擊:

wasSuccessful=false 

while [ "$wasSuccessful" = "false" ] 
do 

#Bunch of code here, then the check for exit code 

if [ $? -eq 0 ]; then 
    wasSuccessful=true; 
fi 

done 

如何做這樣的事情任何建議,將不勝感激:)

+0

您的代碼似乎沒問題。你面臨的問題是什麼? Bash中的所有變量都是全局變量,除非在函數中聲明爲局部變量。 – codeforester

+0

我認爲while循環在子shell中執行,所以我對變量所做的更改僅保存到該會話範圍。這是不正確的? – iMatthewCM

+0

@iMatthewCM''while循環'不能在subshel​​l中執行,除非你把它們放在引號'(commands)'裏面。 – alijandro

回答

2

的問題是如何退出while loop時的最新命令在while loop內成功執行?

您不需要global variable來檢查。只要檢查前一個命令的狀態和break它是否成功。

while true 
do 
    # a bunch of code here 
    [ $? -eq 0 ] && break 
done 
+0

我認爲的相反。如果退出代碼不是0,我需要保持循環。 – iMatthewCM

+0

是的,如果退出代碼不爲0,上面的代碼將保持循環運行。 – alijandro

+0

呃...那真是太棒了。非常感謝你!這比我所做的更優雅。當我明天回去工作時,我會給你一個鏡頭(現在就要離開),如果它工作,我會接受答案:) – iMatthewCM