Shell 基礎 2-判斷指令執行成功
通常使用 Shell script 會需要判斷一些指令的執行結果,並將執行結果列印至 log 記錄起來,或是做出相對應的處理。本文在此列出 2 種可以達成此目標的語法。
如果你對於 Shell script 基本語法不太清楚的話,強烈建議先看看這篇:Shell 基礎 1-宣告, 變數, 函數, 確認檔案存在
$?
變數 $?
是 Linux 指令執行結束時所送出的執行結果代碼,而這就是來自於程式的尾端都要 return
結果。基本上,$?
數值為 0
的話,就代表執行正常結束,反之就是其他狀態。然而,執行結果若為其他數值,就必須要去查代表的意義為何,或是我們可以針對特定執行結果各別進行特定的後續處理。
下列範例第3行是為了讓 tar
在進行壓縮的過程不會輸出與壓縮路徑問題相關的訊息,所以選擇不用完整路徑當參數,而是直接切換到想要進行壓縮的目錄之下執行 tar
。
第6行,可以發現這邊用雙引號將變數 $?
包起來,原因是這邊的判斷式 if
是以文字比對。而本範例的邏輯是如果等於 "0"
就顯示成功,其餘的輸出則會顯示 “Failure.” 的字樣。
記得包住
if
判斷條件的中括號內側,都要留一個空白字元。
第6行也可以直接用指令結束的回傳值來做判斷,像下面這樣。
command && <success> || <failure>
這是另一種語法,僅能完成一些簡單的處理流程,但卻有讓程式看起來比較精簡一點的效果。這種語法是在指令後方以兩種符號界定成功或失敗要執行的動作,其中 &&
後方連接著成功後要做的事,||
則是失敗的話要執行的事。
下列範例的目的與上面一樣,只是換成這種語法。
這種語法能判斷執行成功或失敗時要做的事情,當然也可以選擇判斷其中一種結果發生時的後續動作。下列這個做法就是當執行 tar
出錯時,才顯示錯誤的作法。