【Linux入門】終了ステータス
終了ステータスの概要
- プロセスが終了すると、その結果を示すために終了ステータスが返される。
- 終了ステータスは通常、0から255の範囲の整数で表される。
特殊な変数「$?」
- 「
$?
」は直前に実行されたコマンドの終了ステータスを示す特殊な変数。 - 0: コマンドが成功したことを示す。
- 0以外の数値: コマンドが失敗したことを示す。
終了ステータスの確認
$?
変数を使用して、直前のコマンドの終了ステータスを取得できる。
$ echo $? # 直前に実行したコマンドが成功したか?
0 # コマンドの実行が成功した
終了ステータスがエラーの例
以下のシェルスクリプト「script1.sh」を例に終了ステータスがエラーを示す場合について解説します。
【script1.sh】
#!/bin/bash
ls non-existent-file
if [ $? -ne 0 ]; then
echo "ls コマンドがエラーを返しました。"
fi
「ls non-existent-file」の「non-existent-file」は存在しないファイルやディレクトリです。「non-existent-file」というファイルやディレクトリがない場合、このシェルスクリプトを実行すると以下のように出力されます。
$ bash script1.sh
ls: non-existent-directory にアクセスできません: そのようなファイルやディレクトリはありません
ls コマンドがエラーを返しました。
シェルスクリプト内の「ls non-existent-file」でエラーが発生します。ここで、0以外の終了ステータスを返します。if文直前のlsコマンドにエラーが発生したため、「ls コマンドがエラーを返しました。」と表示します。
終了ステータスの利用
終了ステータスを利用して条件分岐やエラーハンドリングを実装することができます。
grepコマンドはファイル中の文字列を検索するコマンドです。
シェルスクリプト「script2.sh」を実行すると、「file.txt」に "pattern" という文字列が含まれる場合、「ファイル内にパターンが見つかりました。」と表示し、文字列が含まれない場合、「パターンは見つかりませんでした。」と表示します。
【script2.sh】
#!/bin/bash
grep "pattern" file.txt
if [ $? -eq 0 ]; then
echo "ファイル内にパターンが見つかりました。"
else
echo "パターンは見つかりませんでした。"
fi
カスタム終了ステータスの設定
スクリプトやプログラム内で特定の終了ステータスを設定するには、「exit 0以外の番号」と指定します。
exit 1 # カスタムのエラーコード1で終了
終了ステータスの一般的な意味
- 0: 成功
- 0以外の数値: エラーコード