Lから始まるLinux

3章12話
制御文とリダイレクト
3章13話 exitコマンド
もくじ
3章14話
ヌルコマンド
exit コマンド
若木 みどり
お兄ちゃん! シェルスクリプトは 書いてあることが 全部処理されるまで 終われないのかな?
若木 しげる
そんなことはないよ 今回はシェルを途中で止める exit を学ぼう!
基本
若木 しげる
exit 現在のシェルを終了させるよ
exit [終了ステータス]
若木 みどり
終了ステータス省略できるんだね?省略したらどうなるのかな?
若木 しげる
それは直前に実行していたコマンドの終了ステータスがシェルの終了ステータスになるんだ
若木 みどり
シェルスクリプト内ではスクリプトを解釈しているシェルを終わらせるんだよね?普段操作しているシェルでも実行できるのかな?
若木 しげる
うん、できるよこの場合は操作しているシェルが終了するからlogout とほぼ同じ動作になるよ
実践
若木 みどり
スクリプトを途中で止めるような場面ってどういうのがあるかな?
若木 しげる
前提条件を満たしていなければ処理をせず停止する場合などがあるよ以下の例はどうだろう?
#!/bin/bash

if [ "$(whoami)" != "midori" ]
then
  echo "midori ユーザで実行して下さい!" >&2
  exit 1
fi

# midori ユーザだけの処理
...
若木 みどり
whoami はユーザ名を取得だよね!実行したユーザがmidori じゃなかったらエラーメッセージを出してexit で停止してくれるんだ!
若木 しげる
test の評価を変えれば「指定されたファイルが存在していれば」「書き込み権限がなければ」など色々な前提条件を判断できるよ!
サブシェルでの exit
若木 しげる
グルーピング ( ... ) 内でexit を実行するとサブシェルが終了するよ元のシェルは終了しないので挙動の違いに気をつけよう!
#!/bin/bash

(
  echo "この処理は実行される"
  exit # ここでサブシェルが終了する
  echo "この処理は実行されない"
)

echo "この処理は実行される"
若木 みどり
シェルの中でシェルを立ち上げているんだものねこういう場合の exit気をつけるよ!
まとめ
若木 みどり
今回は exit を学んだよ!シェルを途中で終了させることができるんだ!
若木 しげる
シェルスクリプトでこれ以上処理を続けたくない場合exit で途中で終了しよう!