shell指令碼中使用while存在隱患

2021-07-29 17:44:00 字數 921 閱讀 8185

20170315uat

批量,在給零售通知書新增民生logo的作業中

發現執行報錯,但是指令碼繼續執行,並且排程圖上沒有反應報錯情況。

經排查,發現shell指令碼中在使用的while語句用法存在著隱患,具體情況如下:

cat $file|while read line do

...if [ $? -ne 0 ]

then 

...exit 1 fi

done

echo "hello world"  # 迴圈體退出時,還是會執行此操作,列印出hello world,整個指令碼返回0

例如:

在這種while用法中,即使迴圈體內部退出,雖然中斷了迴圈,但是shell指令碼仍會繼續執行後續處理,並且整個shell執行完成後返回碼為0,這樣排程圖就捕捉不到錯誤,很容易被人忽略掉。

對於環境中使用了上述用法的指令碼需修改為

while read line do

...if [ $? -ne 0 ]

then 

...exit 1 fi

done < $file

echo "hello world"  # 迴圈體退出時,還是不會執行此操作,不列印出hello world,整個指令碼返回1

例如:

while命令 shell指令碼

while test command do other commands donewhile 命令中定義的test command和if then語句的格式一模一樣。可以使用任何普通的bash shell命令,或者用test命令進行條件測試,比如測試變數值。while命令的關鍵在於所制定的test ...

nodejs 中使用shell指令碼

雖然nodejs的require child process execsync可以使用shell,但其實問題特別多。尤其是符號和語法衝突,可讀性也很差,只能完成一些小規模的shell使用。const exec require child process execsync 執行,刪除.dist目錄下所...

nodejs 中使用shell指令碼

雖然nodejs的require child process execsync可以使用shell,但其實問題特別多。尤其是符號和語法衝突,可讀性也很差,只能完成一些小規模的shell使用。const exec require child process execsync 執行,刪除.dist目錄下所...