🐧 Linux 総合学習プラットフォーム
シェルスクリプト ・ 入門〜中級

堅牢なスクリプトにする

事故を防ぐ定番の作法がある。冒頭に set -euo pipefail を置くと、エラー・未定義変数・パイプ途中の失敗で即停止する。trap で終了時の後片付け(一時ファイル削除など)も仕込める。

手元で動いたスクリプトが、本番で静かに壊れる——多くは「途中で失敗したのに、そのまま先へ進んでしまった」ことが原因だ。数行の作法で、この事故はかなり防げる。

🧯 冒頭の安全装置

冒頭に set -euo pipefail を置く。-e はエラーで即停止、-u は未定義変数をエラー扱い、pipefail はパイプの途中の失敗も見逃さない。黙って通り過ぎることを許さなくなる。

💡
ポイント「動いているように見えて実は失敗」を、実行の最初の一歩で止められる。新しく書くスクリプトはこの1行から始めるとよい。

🧹 trap で後片付け

一時ファイルを作る処理では、途中で失敗しても消し残さないよう trap を使う。trap で EXIT を捕まえれば、正常終了でも異常終了でも必ず後片付けが走る。

tmp=$(mktemp); trap 'rm -f "$tmp"' EXIT — これ以降どこで終わっても $tmp は消える。

🔎 動きを覗く

うまく動かないときは bash -x script.sh で実行すると、各行が展開後の姿で表示される。どの変数が何に化けたか、どこで止まったかが一目で分かる。

つまずきset -e は万能ではない。条件式の中や || でつないだ箇所では止まらないことがある。過信せず、要所は $? や if で明示的に確認する。
コツ引数チェック([ $# -lt 1 ] && { echo 使い方…; exit 1; })を先頭に足すと、使い方ミスを早い段階で弾ける。

この項目に出てくる用語

set -e / set -u / pipefailせっといー
スクリプトの安全装置。エラーや未定義変数、パイプ途中の失敗で即座に停止させる。
trapとらっぷ
シグナルや終了イベントに応じてコマンドを実行する仕組み。後片付けに使う。

関連コマンド

settrap

▶ 学習アプリでこの続きを学ぶ・演習する