まず終了ステータスについて
シェルスクリプトの最後に
exit [n]
と書いた場合はnが終了コードnを書かない場合は最後に実行したコマンドの終了コードを引き継いで正常終了する
nに数字以外を書くとエラー終了
nは0から255の数字を入れる
1のみエラー終了、それ以外は正常終了
■ 参考 : 終了ステータスを設定
終了ステータスは $? というシェル変数に代入されているので、その値を見て処理を分岐させればOK
ただし、そんな処理分岐をしなくても
command1が成功したら、command2を実行するという風に処理を進めたい場合は次のように書けばOK
command1 && command2 && command3
コマンドが失敗した場合のみ進めるというのもあるが、こっちは使いみちがあんまりわからん
代替手段をcommand2とcommand3に書いておくのかな?
command1 || command2 || command3
rm -f の終了ステータスは常に0になる
他のユーザのファイルを削除しようとした場合は1になる
とりあえずrm -f の終了ステータスは信用しないようにする
話は変わって、シェルスクリプトのset -eについて
■ 参考 : シェルスクリプトを書くときはset -euしておく
この記事ではset -euと書いてあるけど、自分が使いたいのはひとまず set -e
これはシェルスクリプトの中で、正常終了しないコマンドがあった場合はそこでシェルスクリプトの処理が止まる
set -uは未定義の変数を使おうとしたときに打ち止めしてくれるオプション
ある処理がうまくいってなくて、その結果未定義な変数があるときにちゃんと処理を止めてくれるという優れもの
ある処理1からある処理2まではset -eのオプションの機能を止めたい場合は
set +e
# ここからset -eを止めてる
#
#
#
set -e
# ここからset -eが機能してる
#
みたいにset +eを使えばOK# ここからset -eを止めてる
#
#
#
set -e
# ここからset -eが機能してる
#
ランキング参加中です
↓クリックしていただけると嬉しいです〜