Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルスクリプト】終了ステータスとset -e

まず終了ステータスについて

■ 参考 : exitコマンド(シェルを終了する)

シェルスクリプトの最後に

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


ランキング参加中です

↓クリックしていただけると嬉しいです〜