1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェル $? 関数の戻り値、または直前のコマンドの終了ステータスを取得する

2022-02-12 18:20:48

は、最後のコマンドの終了状態、または最後の関数の戻り値を取得する特殊な変数です。

終了ステータスは、直前のコマンド実行の結果です。終了ステータスは数値で、一般にほとんどのコマンドは、C言語のmain()関数と同様に、成功すれば0を、失敗すれば1を返します。

しかし、別の値を返すコマンドもあり、これはエラーの種類を表しています。

1) $? 直前のコマンドの終了ステータスを取得する

以下のコードを書き、test.shという名前で保存してください。

#! /bin/bash
if [ "$1" == 100 ]
then
  exit 0 #Correct parameter, exit status is 0
else
  exit 1 #Error argument, exit status 1
fi

exitは現在のシェルプロセスを終了することを意味し、新しいプロセスでtest.shを実行する必要があります。そうしないと、現在のシェルセッション(ターミナルウィンドウ)が閉じられ、その終了状態を取得することができなくなるからです。

例えば、引数100を渡してtest.shを実行する場合。

[mozhiyan@localhost ~]$ cd demo
[mozhiyan@localhost demo]$ bash . /test.sh 100 # Run as a new process
[mozhiyan@localhost demo]$ echo $?
0


ここでも、test.shの実行時にパラメータ89を渡します。

[mozhiyan@localhost demo]$ bash . /test.sh 89 # Run as a new process
[mozhiyan@localhost demo]$ echo $?
1


2) $? 関数の戻り値を取得する

以下のコードを書き、test.shという名前で保存してください。

#! /bin/bash
#Get the sum of two numbers
function add(){
  return `expr $1 + $2`
}
add 23 50 # Call the function
echo $? #Get the return value of the function


ランニングの結果
73

C++、C#、Javaなどでプログラミング経験のある読者は、厳密に言えば、シェル関数のreturnキーワードは関数の戻り値ではなく、関数の終了状態を示すために使われることに注意してください。他のプログラミング言語と異なり、シェルには戻り値を特に扱うキーワードはありません。

以上でシェル$の記事は終わりです。関数の戻り値や直前のコマンドの終了ステータスを取得する方法についての説明は以上となります。Scripting Houseの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。