【Bash】コマンドの戻り値によって後続の処理を変更する

2023/07/25に公開

やりたいこと

コマンドの終了コードによって後続の処理を変更したい。

環境

$ bash --version
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

戻り値(終了コード)とは

  • コマンド実行後に返却される値
  • 一般的に0なら正常終了、それ以外なら失敗とされる
    • コマンドごとの終了コードはそのリファレンスを参照
  • $?変数を確認することで、最後に実行されたコマンドの終了コードを確認できる
  • man bashEXIT 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
https://qiita.com/tsubasaogawa/items/646991982ce6d60fccf5
https://www.greptips.com/posts/1174/
http://x68000.q-e-d.net/~68user/unix/pickup?������

Discussion