test コマンドを使用して$?
(最後に実行されたコマンドの戻りコード) がゼロでないかどうかを確認するスクリプトがあります。コードは次のとおりです。
$?
最後に実行されたコマンドの終了ステータスです。
if (test $? -ne 0)
then
//statements//
fi
ただし、この検証方法は get syntax error として文字列に対しては機能しません。これに代わる適切な方法を提案してください。
以下に示すように、最初に変数に入れてからテストしてみてください
ret=$?
if [ $ret -ne 0 ]; then
echo "In If"
else
echo "In Else"
fi
これは役立つはずです。
編集:上記が期待どおりに機能しない場合は $?
、適切な場所で使用していない可能性があります。戻りステータスをキャッチする必要があるコマンドの直後の行でなければなりません。ターゲットとその戻りステータスをキャッチする間に他の単一のコマンドがあったとしても、期待しているものではなく、この中間コマンドの returns_status を取得することになります。
どのように文字列を取得したかはわかりませんが、次の$?
ことができます。
if [[ "x$?" == "x0" ]]; then
echo good
fi
これは、同様の問題に対して思いついた解決策です
exit_status () {
if [ $? = 0 ]
then
true
else
false
fi
}
利用方法:
do-command exit_status && echo "worked" || echo "didnt work"
<run your last command on this line>
a=${?}
if [ ${a} -ne 0 ]; then echo "do something"; fi
echo "do something"
コマンドの代わりに、使用したいコマンドを使用してください
if [ $var1 != $var2 ]
then
echo "$var1"
else
echo "$var2"
fi
スクリプトの開始時に set -o pipefail を配置して、失敗を返す
あなたがそうすれば、テストは失敗しますが、ティーは失敗しません。デフォルトでは $? 最後のコマンドを成功させるだけです。この場合は「tee」コマンドです
test | tee /tmp/dump
[ $? -ne 0 ] && echo "failed"
function assert_exit_code {
rc=$?; if [[ $rc != 0 ]]; then echo "$1" 1>&2; fi
}
...
execute.sh
assert_exit_code "execute.sh has failed"