コマンド実行時にエラーが発生したかどうかを確認する方法はありますか?
例:
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
既にやってみたのですが、うまくいかないようです。私はそれをどのようにして行うのか分かりません。
戻り値は $?
に格納されます。0は成功、その他はエラーを表します。
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
他のテキスト値と同様に、将来の比較のために変数に格納することができます。
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
可能な比較演算子については、man test
を参照してください。
コマンドが成功したか失敗したかだけを知りたい場合は、わざわざ $?
をテストする必要はなく、コマンドを直接テストしてください。例えば、以下のようになります。
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
また、出力を変数に代入しても、戻り値は変わりません(もちろん、stdoutがターミナルでないときに挙動が変わらなければの話ですが)。
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals では if
についてより詳しく説明しています。
には、前のコマンドの終了ステータスが入り、エラーがなければ0になります。
つまり、次のようなものです。
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
ほとんどの場合、お互いに依存する必要のあるコマンドを連鎖させるために、&&構文を使用する方が簡単です。 つまり,cd /nonexistant && echo success!
は,コマンドが&&の前で終了してしまうため,成功を表すことはできません. これの裏返しが || であり、cd /nonexistant || echo fail
は cd が失敗したので would* echo fail となります。 (これは、前のコマンドが失敗した場合にスクリプトを終了させる ||exit のようなものを使用する場合に便利です)。