シェルスクリプト(条件が期待どおりに機能しない場合)

シェルスクリプト(条件が期待どおりに機能しない場合)

いくつかのLinuxコマンドを実行し、if句で例外をキャッチして結果を出力するスクリプトを作成しました。基本的に、以下の抜粋コードの各変数はコマンドの実行状態を示し、すべてのコマンドが正常に実行されるとスクリプトが正常に終了することを願っています。そうでなければやめたい。スクリプトのテスト中に、意図的に変数(X8など)に対して1の出力でコマンドが失敗するようにしました。この場合、以下は期待どおりに機能しません。スクリプト失敗メッセージの代わりに成功メッセージが表示されます。なぜそうなのか分からない

if [ $X1 != 0 ] &&  [ $X2 != 0 ] &&  [ $X3 != 0 ] && [ $X4 != 0 ] && [ $X5 != 0 ] && [ $X6 != 0 ] && [ $X7 != 0 ] && [ $X8 != 0 ];
then echo "script failed"; exit 1;     
else echo "success"; fi;

ベストアンサー1

スクリプトの上部に次を追加します。

trap 'echo "Error $? at $LINENO; aborting." 1>&2; exit $?' ERR

その後、キャッチされないエラーが発生するたびに、スクリプトは上記のメッセージを表示し、無効な終了コードで終了します。エラーに対して終了コード1を使用するには、$?に変更できます。1

おすすめ記事