Linux
如果滿足條件,則退出 sh 腳本
也許這是一個菜鳥問題,但我對 sh 腳本相當陌生,我必須等待大約兩個小時才能確保我的邏輯是正確的,所以我只想在這裡問。
我有一個 sh 腳本,它應該獲取特定文件的行數;滿足條件後,應立即退出/停止整個 sh 腳本
if [wc -l "$file_data" -lt 2000]; then echo "does not meet minimum requirements" exit -1
我不知道我是否應該去
exit 0
orexit 1
orexit -1
?
邏輯是正確的,但語法不正確。
if [ "$(wc -l <"$file_data")" -lt 2000 ]; then echo 'Error error' >&2 exit 1 fi
- 和分別在它們之後和之前需要空格
[
。]
需要空格,因為[
它是一個單獨的命令,並且]
需要是該命令的最後一個參數。- 可以使用命令替換將命令的輸出替換為字元串,
$(...)
. 在上面的測試中,我們使用命令替換來計算文件中的行數。結果被插入到我們與數字 2000 進行比較的字元串中。我們將文件中的數據重定向到wc -l
,這意味著我們不必從wc
輸出中刪除文件名。- 退出狀態應該為零表示成功,或 1 到 127 之間的非零整數表示失敗。除了非零之外,這些數字除了您的程式碼賦予它們的含義之外沒有任何內在含義。一些工具使用不同的數字來指定不同的錯誤條件,例如參見
curl
(稱為“EXIT CODES”rsync
的部分)和(稱為“EXIT VALUES”的部分)的手冊。大多數工具僅用於1
發出故障信號。- 診斷消息和錯誤等,應輸出到標準錯誤流。你可以通過重定向來做到這一點
>&2
。這樣做可以將腳本的普通輸出與任何診斷消息分開,而不會在輸出中混雜錯誤消息。出於同樣的原因,互動式提示和問題等也被輸出到標準錯誤流中。if
語句以結束fi
。另請參閱https://www.shellcheck.net/站點以獲取可幫助您擷取最基本錯誤的工具。