Linux

如果滿足條件,則退出 sh 腳本

  • October 10, 2021

也許這是一個菜鳥問題,但我對 sh 腳本相當陌生,我必須等待大約兩個小時才能確保我的邏輯是正確的,所以我只想在這裡問。

我有一個 sh 腳本,它應該獲取特定文件的行數;滿足條件後,應立即退出/停止整個 sh 腳本

if [wc -l "$file_data" -lt 2000]; then
       echo "does not meet minimum requirements"
       exit -1

我不知道我是否應該去exit 0or exit 1or exit -1

邏輯是正確的,但語法不正確。

if [ "$(wc -l <"$file_data")" -lt 2000 ]; then
   echo 'Error error' >&2
   exit 1
fi
  1. 和分別在它們之後和之前需要空格[]需要空格,因為[它是一個單獨的命令,並且]需要是該命令的最後一個參數。
  2. 可以使用命令替換將命令的輸出替換為字元串,$(...). 在上面的測試中,我們使用命令替換來計算文件中的行數。結果被插入到我們與數字 2000 進行比較的字元串中。我們將文件中的數據重定向到wc -l,這意味著我們不必從wc輸出中刪除文件名。
  3. 退出狀態應該為零表示成功,或 1 到 127 之間的非零整數表示失敗。除了非零之外,這些數字除了您的程式碼賦予它們的含義之外沒有任何內在含義。一些工具使用不同的數字來指定不同的錯誤條件,例如參見curl(稱為“EXIT CODES”rsync的部分)和(稱為“EXIT VALUES”的部分)的手冊。大多數工具僅用於1發出故障信號。
  4. 診斷消息和錯誤等,應輸出到標準錯誤流。你可以通過重定向來做到這一點>&2。這樣做可以將腳本的普通輸出與任何診斷消息分開,而不會在輸出中混雜錯誤消息。出於同樣的原因,互動式提示和問題等也被輸出到標準錯誤流中。
  5. if語句以結束fi

另請參閱https://www.shellcheck.net/站點以獲取可幫助您擷取最基本錯誤的工具。

引用自:https://unix.stackexchange.com/questions/671909