私は次のコードを実行して、すべてが実行された場合に失敗した場合にメールでエラーメッセージを送信します。
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" [email protected]
else
mailx -s" PreProcessed files" [email protected]
fi
done
私はLinuxコーディングを初めて使用するのですが、何を理解したいのですかif [[ $? -ne 0 ]];
手段
それを分解すると、簡単な用語:
[[ and ]]
...真実性についてテストが行われていることを示します。
$?
...は、最後に実行されたコマンドの終了コードを保持する変数です。
-ne 0
...左側のものが($?
)は「等しくない」「ゼロ」です。 UNIXでは、ゼロで終了するコマンドは成功しましたが、他の値(1、2、3 ...最大255)での終了は失敗です。
if [[ $? -ne 0 ]];
この直前のif条件の戻りコードをチェックしています。
$?
は戻りコードを意味します$? -ne 0
は、0が成功と見なされるため、前のコマンドがエラーを返したことを意味します前のコマンドがエラー戻りコードを返した場合。
おそらく、スニペットは次のようなコードの一部です。
for var in list of words; do
cmd $var
if [[ $? -ne 0 ]]; then
mailx -s" could not PreProcess files" [email protected]
else
mailx -s" PreProcessed files" [email protected]
fi
done
これは、次のように簡単に書き直すことができます(そして書き直すべきです)。
for var in list of words; do
if ! cmd $var; then
message="could not PreProcess files"
else
message="PreProcessed files
fi
mailx -s" $message" [email protected]
done
[[ $? -ne 0 ]]
句はcmd
の戻り値をチェックするハックな方法ですが、$?
を明示的にチェックする必要はほとんどありません。シェルにif句でコマンドを呼び出してチェックを行わせると、コードはほぼ常にきれいになります。