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目錄下所...