2016-12-22 55 views
3

要檢查猛砸使用下列邏輯命令的退出代碼:如何在Bash腳本中創建高效的錯誤檢查?

if [ $? -ne 0 ] 
then 
    echo "Error occurred" 
    return 1 
fi 

我的問題是,每一個命令之後增加,這使得腳本很長着一樣的東西多份,並很難保持。

這裏最好的東西就是一個函數,它將從所有需要檢查退出代碼的位置調用。問題是無法使用exit命令,因爲它會終止當前進程(當前Bash會話將被終止),因此只能使用return命令。但是,當使用return命令時,在調用函數中,調用函數仍然必須檢查退出代碼,並且回到相同的問題。

有沒有像在Bash中的MACRO或任何其他方式的錯誤檢查更有效?

+0

'set -e'? – Biffen

+0

它會殺死當前進程,並且不是所需的行爲 –

回答

1

取而代之的是:

somecommand 
if [ $? -ne 0 ] 
then 
    echo "Error occurred" 
    return 1 
fi 

你並不需要寫上$?可變條件, 您可以使用命令本身if聲明:

if ! somecommand 
then 
    echo "Error occurred" 
    return 1 
fi 

另一種方法是創建一個輔助函數來封裝錯誤操作,並使用||該命令後,操作者調用後的功能,然後return 1

error() { 
    echo "Error occurred" 
} 

somecommand || { error; return 1; } 

最後,如果你並不真正需要return 1,你不介意退出腳本失敗的情況下,那麼你可以exit 1內助手功能,然後來電代碼可以變得更加緊湊:

fatal() { 
    echo "Error occurred" 
    exit 1 
} 

somecommand || fatal 
+0

謝謝!!運營商||選擇看起來不錯,每次只有一行而不是4個 –

+0

你是對的:) –

+0

@ A.David謝謝,但是如果我是對的,他們爲什麼還沒有把它標記爲公認的答案? – janos