Linux コマンドの戻り値を取得する ($?の意味)

目次

$?の意味

$? は シェルの特殊変数 で、「直前に実行したコマンドの終了ステータス」を表します。

終了ステータスは数値で返されます。

0 → 成功(正常終了)

0 以外 → エラー(異常終了)

例:

[test@localhost test1]$ ls -l
合計 0
drwxrwxr-x 2 test test 41  2月 14  2024 test1
drwxrwxr-x 2 test test 41  2月 14  2024 test22
[test@localhost test1]$ echo $?
0
[test@localhost test1]$ lss
bash: lss: コマンドが見つかりませんでした...
よく似たコマンドは: 'ls'
[test@localhost test1]$ echo $?
127
[test@localhost test1]$

5,6行目は、コマンドが成功し正常終了したので0が表示されています。
10,11行目は、コマンドが失敗したので127が表示されています。

 

$?の値を変数にセットする

$?の値を変数にセットすることができます。

[test@localhost test1]$ ls -l
合計 0
drwxrwxr-x 2 test test 41  2月 14  2024 test1
drwxrwxr-x 2 test test 41  2月 14  2024 test22
[test@localhost test1]$ TEST=$?
[test@localhost test1]$ echo "status= $TEST "
status= 0
[test@localhost test1]$

5行目は、$?の値を変数にセットしています。
6行目は、echoで文字列と変数を指定しています。
7行目は、echoの結果が出力されています。

 

$?の実用例(コマンド実行の成功と失敗の条件分岐に使用)

以下のようにシェルでコマンドの実行の成功と失敗の条件分岐に使用できます。

cp file1.txt /backup/
TEST=$?
if [ $TEST -eq 0 ]; then
    echo "コピー成功"
else
    echo "コピー失敗(コード: $TEST)"
fi

関連の記事

CentOS コマンド一覧 (Linux)

△上に戻る