Lから始まるLinux

2章50話
ハッシュ(使い方)
2章51話 終了ステータス
もくじ
2章52話
testコマンド
終了ステータス
若木 みどり
お兄ちゃん! たいていのコマンドって実行しても 起こったことを知らせてくれないよね 失敗したらエラーメッセージが 出ることが多いけど 成功したか失敗したかわかりにくいよ
若木 しげる
実はコマンドは成功や失敗を 伝えているんだよ 今回は「終了ステータス(exit status)」を学ぼう! 「終了コード(exit code)」 「返り値(return value, retval)」とも よばれるよ
若木 みどり(驚き)
えっ? コマンドは成功か失敗を 教えてくれていたの?
若木 しげる
普段は気にならないようになっているので 気が付かないのが普通だから大丈夫だよ
若木 しげる
終了ステータスは 「コマンドの成否」 数字で表したものだよ 実はこの数字を返していたんだ
true コマンド
若木 しげる
true どんな引数が与えられても 何もせず成功で終了するよ
true [引数]...
若木 しげる
引数なしで実行してみよう!
true
若木 みどり
…何も起こらずすぐにプロンプトが表示されたね
若木 しげる
何も起こっていないように見えるけどシェルはこのコマンドの「成功」という結果を覚えているんだ
若木 みどり
どうやって見ればいいのかな?
若木 しげる
? 変数を使おう!この変数には直前のコマンドの終了ステータスが入っているんだ
若木 しげる
echo? 変数の値を表示させて確認しよう
echo $?
若木 みどり
どれどれ…
0
若木 みどり
0 が表示されたよ!true が成功して終了するということは0 は成功を意味するんだよね?
若木 しげる
そのとおり!シェルでは 0 が成功0 以外は失敗を意味するよ
false コマンド
若木 しげる
falseどんな引数が与えられても何もせず失敗で終了するよ
false [引数]...
若木 みどり
名前がわかりやすいね!
若木 しげる
こちらも引数なしで実行してみよう!
false
若木 みどり
うん!
若木 みどり
これも特に何も起きずすぐプロンプトが返ってきたね
若木 しげる
挙動は true と同じだけど結果が違うんだ終了ステータスを確認してみよう
echo $?
若木 みどり
これまでの説明からすると0 以外が入っていそうだね
1
若木 みどり
今度は 1 が表示されたよ!0 以外が「失敗」意味するんだよね!
若木 しげる
そうなんだコマンドは終了するときに終了ステータスを返しているよ普段はあまり見ることはなく必要な時に確認するものなんだ
若木 みどり
なるほど…コマンドが成功したかどうか? 変数で確認できるんだね
終了ステータスの反転 !
若木 しげる
コマンドの前に ! を付けるとそのコマンドの終了ステータスを反転するよ
! コマンド
若木 みどり
コマンドが「成功(0)」を返せば「失敗(0以外)」コマンドが「失敗(0以外)」を返せば「成功(0)」を返すってこと?
若木 しげる
そういうことだね!
まとめ
若木 みどり
今回は終了ステータスを学んだよ!コマンドは終了ステータスという数字を返していて成功は 0失敗は 0 以外なんだ!また成功と失敗は ! で反転できるんだね!
若木 みどり
でもこれってどういう場面で役に立つのかな?
若木 しげる
例えば状況を判断して処理を分ける場合に使われるよ「あるコマンドが成功したら次の処理をする」とか「失敗したらエラーメッセージを表示する」といった感じだね具体的な使い方は少し応用的だからもう少し後で学ぶことにしよう