それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash のシンタックスチェックでシンタックスエラーを防ぐ

bash にもシンタックスチェック機能があります。

シンタックスチェックをすることでエラーを未然に防ぐ事ができます。

たとえば、長文のシェルスクリプトを書いているときシンタックス・チェックが有ると、事前にミスが見つかるので便利です。

bashシンタックスチェック
bash -n my_script.sh

ちなみにbash 以外のzsh/dash などでも使えます。

文法ミスで死ぬのは辛いのでチェックしましょう

シンタックスチェックが重要なわけ

bashインタプリタ(死語?) で、特に1行ずつ読み込んで評価・実行する言語になっています。

したがって、文法エラーがあると文法エラーの箇所の直前まで「実行」されてしまいます。

文法エラーの例
echo aaaaaaaaaaa
if (())

fi
上のサンプル(文法エラー)を実行した例
takuya@Desktop$ bash  test.sh
aaaaaaaaaaa
test.sh: 行 11: 予期しないトークン `fi' 周辺に構文エラーがあります
test.sh: 行 11: `fi '
途中まで実行されてしまう。

文法エラーがあっても、bashは1行ずつ評価します。そのためエラー直前まで実行が進んでしまいます。

そして、文法エラーになった箇所で止まってしまいます。

これはステートレスではないスクリプト、たとえばファイルを消す、データベースを書き換えるなど状態が変わるスクリプトを実行しているときに困ります。

途中まで実行してしまい、残りがシンタックスエラーになり未実行で残されてしまいます。非常に困りますね。

このような事故を未然に防ぐためにシンタックスをチェックする習慣を意識した方がいいでしょう。

とくに数十行以上に渡る長いシェルスクリプトを書くときに重要になってきます。

関連資料

http://takuya-1st.hatenablog.jp/entry/2016/04/03/230008