shell 語句出錯或者異常自動退出 不繼續執行

 

       今天操做的時候遇到一個問題,須要把內容重定向到文件,而後再把文件重命名使用,結果重定向的時候已經拋異常了,下面的天然也會接着出現各類問題。因此,仍是以爲一些關鍵操做要作一些判斷或者捕獲異常,避免出現更嚴重的問題。shell

解決辦法以下:bash

使用set -e

你寫的每個腳本的開始都應該包含set -e。這告訴bash一但有任何一個語句返回非真的值,則退出bash。

使用-e的好處是避免錯誤滾雪球般的變成嚴重錯誤,能儘早的捕獲錯誤。更加可讀的版本:set -o errexit 

使用-e把你從檢查錯誤中解放出來。若是你忘記了檢查,bash會替你作這件事。

不過你也沒有辦法使用$? 來獲取命令執行狀態了,由於bash沒法得到任何非0的返回值。

你可使用另外一種結構,使用command

使用command

if [ "$?"-ne 0]; then echo "command failed"; exit 1; fi "

能夠替換成: 

command ||  echo "command failed"; exit 1; (這種寫法並不嚴謹,我當時的場景是執行ssh "commond",
因此能夠返回退出碼後面經過[ #? -eq 0 ]來作判斷,若是是在shell中不管成功仍是失敗都會exit)

修改以下(謝謝評論的朋友指正)


command ||  (echo "command failed"; exit 1) ; 

或者使用: 

if ! command; then echo "command failed"; exit 1; fi
相關文章
相關標籤/搜索