いがぴょん的シェル・コーディング規約

シェルを書こうとして、どうやら 結構わからないことがあったので、簡単に整理しました。

ファイル

拡張子
  • 「.sh」:実行対象のシェルのファイル拡張子は .sh とします。
    • 「.sh」は必ず exit を呼び出すものとします。
  • 「.env」:環境情報のファイル拡張子は .env とします。
    • 「.env」は exit は呼び出さないこととします。
    • 「. ./sample.env」 のように読み込みます。
  • 「.fnc」:関数を含むファイル拡張子は .func とします。
    • 「.fnc」は exit は呼び出さないこととします。
実行パーミッション
  • 実行パーミッション「x」は指定しないこととします。
  • 呼び出し時は sh ./XXX.sh のように明示的にパス付きで指定することとします。
改行コード
  • Linux で動作させるシェルについては LF 改行とします。

ソース

ソースヘッダー

JavaDoc 的な記法を採用します。

#!/bin/sh
# @(#) sample.sh ver1.0
#
# Usage:
#   sh ./sample.sh
#
# Description:
#   ○○処理バッチです。
#
# @author いがぴょん
# @version 1.0 2014-01-01 新規作成。
#####################################################################
インデント

半角空白 2 つとします。

変数・定数
  • 定数は 大文字とします。readonly 宣言します。
  • 変数は小文字から始まるキャメルケースとします。
  • 変数・定数は ${VAR} のように {} で囲みます。ただし $? などについてのみ {} は利用しないこととします。
文字列リテラル
  • 原則、シングルクオートを用います。
  • 変数展開したい場合にのみ、ダブルクオートを用います。

ログ

syslog

以下のように定数宣言して利用することとします。

readonly LOGGER='/usr/bin/logger -t sample.sh -i'
${LOGGER} 'こんにちは世界。'
  • プログラム名のところは適宜読み替えてください。
  • 重要な処理である場合は、開始時と終了時をシスログ出力します。
標準エラー

エラーメッセージは標準エラー出力してください。

echo 'エラーが発生しました。' 1>&2

算術演算

$(())形式を利用します。

echo $((3 * 2))