bashの前提
開発環境
- vscodeで開発する
- シェルのlinter ShellCheckの拡張機能を導入する
シェバング
#!/bin/bash -eu
オプション説明
e
コマンドに失敗(戻り値が0以外)した場合、エラーになって止まる。
予想外のコマンド失敗が発生したまま後続処理が進行し、取り返しのつかない事態となる事を防いでくれる。
一時解除
なんらかの理由により、コマンド失敗を許容しなければならない場合は、前後にset +e
set -e
を記載すると、一時的に制限解除と出来る。
set +e
command
set -e
ちなみに下記のようなコーディングをすれば、一時解除は不要でcommand1
が失敗した場合も終了せずにcommand2
が実行される。
※もしかしたら環境によって異なるかも。
command1 || command2
if ! command1; then
command2
fi
u
宣言されていない変数を使おうとすると、エラーになって止まる。
remove_dir="hoge"
rm -rf "/directory/$remove_dire" # タイポ
みたいにタイポした場合、上位ディレクトリからごっそり消える事故から守ってくれるので安心。
全体構成
原則、下記の構成をとる。
関数が無いような、単純なシェルの場合はmain関数を定義せずに書く場合もあり。
#!/bin/bash -eu
# 定数
# 関数
# メイン
main() {
# メインの処理
}
main "$@"
変数
定数
アッパースネークケース
readonly
とする
readonly SAMPLE_CONSTANT="hoge"
変数
スネークケース
sample_variable="hoge"
ローカル変数
関数内でしか使わない変数はlocal
を付与しローカル変数とする。
変数名は先頭にl_
を付与する。
local l_variable="hoge"