[ShellScript] $?をif-elifで使ったら死ぬよ!!
実行結果
"Unknown Error 1"あれ??
ちょww
一瞬目が点になりました。
FatalErrorをキャッチしたと思ったら、キャッチできていません。
どういうこと?
こういうことです。#!/bin/sh
func () {
# Fatal Error
return 3
}
func
if [ $? -eq 3 ] ;then
echo "Unknown Error $?"
fi
実行結果
Unknown Error 0そう、if の条件式が、「コマンド」であることを忘れていました。
[]コマンドは「コマンド」なので、これを実行した結果のステータスコード が $?に再代入されてしまっているのです。
正しい書き方
$?をすぐに一時変数に代入してやれば、期待通りの結果が得られます。#!/bin/sh
func () {
# Fatal Error
return 3
}
func
ret=$?
if [ $ret -eq 0 ] ;then
echo "ok"
elif [ $ret -eq 3 ]; then
echo "Fatal Error $ret"
else
echo "Unknown Error $ret"
fi
実行結果
"Fatal Error 3"(これに気付かず小一時間はまった)
カテゴリ:
Bash