⚾
【Bash】コマンドの戻り値によって後続の処理を変更する
やりたいこと
コマンドの終了コードによって後続の処理を変更したい。
環境
$ bash --version
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
戻り値(終了コード)とは
- コマンド実行後に返却される値
- 一般的に0なら正常終了、それ以外なら失敗とされる
- コマンドごとの終了コードはそのリファレンスを参照
-
$?
変数を確認することで、最後に実行されたコマンドの終了コードを確認できる -
man bash
のEXIT STATUS
の頁に記載されている
戻り値を出してみる
test.txt
をcatします。testt.txt
は存在しません。
~/tmp$ cat test.txt
test
~/tmp$ echo $?
0
~/tmp$ cat testt.txt
cat: testt.txt: No such file or directory
~/tmp$ echo $?
1
① 終了コード0か1かで処理を変えるスクリプト
cat
コマンドの終了コードによって処理を変更するスクリプトです。
#!/bin/bash
FILE="/path/to/your/file"
cat "$FILE"
retval=$?
if [ $retval -eq 0 ]
then
echo "成功しました!"
else
echo "失敗しました…"
fi
② 終了コード1のみ処理を変えるスクリプト
0だとif内の処理は実行しません。
エラー処理に便利なスクリプトです。
#!/bin/bash
FILE="/path/to/your/file"
cat "$FILE"
retval=$?
if [ $retval -ne 0 ]; then
echo "失敗しました!"
fi
なぜ戻り値を変数に入れるのか
retval=$?
のことですね。
戻り値は最後に実行したコマンドのものとなるため、後から使用したい戻り値は変数に格納します。
参考
man bash
Discussion