コーディング規約
- ヘッダを記載する
- ヘッダの直後に基本的な環境変数を定義する
- umask
- LANG
- PATH
- インデントは半角スペース 2 つ
- | は前後にスペース 1 つ
-
、>>は前にスペース 1 つ、後ろは空けない
- <、<<も前にスペース 1 つ、後ろは空けない
- if と then は同一行に、セミコロンの直後はスペース 1 つ
- for、while の do と done は行頭を揃える
- 関数定義の function は省略してもよい(しなくてもよい)
- if 文を省略しない
- 連続した同一ファイルへのリダイレクトはグルーピング
- 変数の命名規則
- 定数は大文字
- 定数以外は小文字
- 複数の単語を連結する場合は「_」で結合する
- readonly 宣言を付けて、読み取り専用にすることを推奨
- ファイル/ディレクトリの絶対パスの場合は、HOGE_FILE または FUGA_DIR
- ファイル名またはディレクトリ名のみの場合は、HOGE_FILENAME または FUGA_DIRNAME
- 今後増える見込みのない少ない繰り返しはループしない
- 正常終了時はリターンコード 0
- 異常終了時はリターンコード 0 以外
- ログレベル
- INFO: 参考情報
- NOTICE: 注意レベル
- WARNING: 警告レベル、処理を中断しないスキップ程度の問題
- ERROR: エラー、処理を中断するレベルの問題
シェルスクリプトのコーディングルール 2014
## 4. フィルタとパイプを意識する
UNIX ツールのほとんどはこの思想のもとに作成されている。データ入力には stdin を使用し、データ出力には
stdout を使用するべきである。こうすることで、パイプによるフィルタリング処理がしやすくなる。パイプでフィル
タしたデータを受け渡し出来るようになれば、他のツールとの連携が行える。
$ cat pipe.sh
#!/bin/bash
if [ -p /dev/stdin ]; then
echo "Pipe"
cat -
fi
$ echo "abc" | ./pipe.sh
Pipe
abc
こうすることでパイプを捕捉し、フィルタコマンドとしての役割を担うことができるようになります。5. 変数を管理する
多くのプログラミング言語では、変数にはスコープが存在しますが、シェルスクリプトの場合、関数内で宣言した変数
もグローバル変数となります(明示的に local コマンドで局所変数化する必要がある)。またシェルスクリプトでは
、環境変数も扱うことが可能です。そこで以下のルールで管理すると良いでしょう(自分なりのルールがあればよい)
。
- 環境変数: 全て大文字(export VARIABLE)
- グローバル変数: 大文字から始まる(Variable)
- ローカル変数: 全て小文字(local variable)
また、定数は readonly を使用し、大文字で宣言します。
- readonly HISTORY_FILE="/path/to/hist_file"
- readonly HISTORY_FILE_NAME="hist_file"