シェルスクリプトでコマンドの戻り値を判定する方法
目次
スポンサードリンク
終了ステータスが格納される変数 $?
シェルスクリプトでは、コマンドの終了ステータスを $? 変数を使用して判定することができます。$? には直前に実行したコマンドの終了ステータスが入ります。
終了ステータスは、一般的に 0であれば正常終了、それ以外の場合はエラーとする慣習があります。これは、シェル内蔵コマンドの場合なので、外部プログラムの場合はそのプログラムの仕様を確認する必要がある点は注意が必要です。
Bashのシェル内蔵コマンドの場合は以下の終了ステータスが予約されています。
- 1 一般的なエラー
- 126 コマンドの実行権限がなかった
- 127 コマンドが見つからなかった
- 128 exit に不正な値を渡した(例えば浮動小数点数)
- 128+n シグナル n で終了
- 255 範囲外の終了ステータス
以下は コマンドをタイプミスした結果、終了ステータスが127になる例です
[root@hostname sbin]# lo
-bash: lo: command not found
[root@hostname sbin]# echo $?
127
戻り値 によって処理を分岐する方法
戻り値によって処理を分岐させたい場合は、test コマンドで処理を分岐させます。$?を直接条件に指定することもできますが、test コマンド自体の終了ステータスで $? が上書きされてしまうことがあるため、変数に格納しておくと安全です。
以下は 実行したコマンドが正常終了したか否かで処理を分岐するサンプルコードです。
#!/bin/bash
# 戻り値を判定したい処理を実行
command
# 戻り値の上書きを防ぐため変数に格納する
rc=$?
if [ $rc -ne 0 ]; then
# エラーメッセージを出力
echo "コマンド「command」の実行中にエラーが発生しました。"
exit 1
fi
# 正常終了時の処理
echo “正常終了した時の処理”
exit 0
シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
リンク
最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。
リンク
Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】
Search
Recent Posts
- OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法
- Apacheの起動状態をチェックして停止してる場合にApacheを起動するシェルスクリプト
- Amazon LinuxのOSバージョンを調べる方法|/etc/redhat-release の代替ファイル
- MYSQLでダンプファイルを取得する際に発生したエラー「Couldn't execute 'SELECT BINLOG_GTID_POS('', '0')': You are not using binary logging (1381)」の原因と対処方法
- RHEL系Linuxでリポジトリを一覧表示するコマンド(dnf repolist)