2017/06/04

Googleシェルスタイルガイドを要約してみた

Googleシェルスタイルガイドをベースに規約をまとめてみました。 ベースにしたのは以下。

用途

小さいツールやスクリプト実行時のラップ程度に抑える。
100行超える場合はPython等の他言語を使うこと

ファイル名

  • ファイル名はlowner_snake_case
    • 例)snake_case.sh

ヘッダー

  • シェバン: #!/bin/bash //Bashを明示する
  • トップレベルコメント
  • 定数or変数宣言

インデント

  • 半角スペース2つ

標準出力、標準エラー出力

  • エラーはSTDOUT(標準出力)ではなくSTDERR(標準エラー出力)に出力する
    • 成功した時は何も返さない。
    • エラー時は端的に原因だけを伝える。
    • 正常時、異常時それぞれ簡単に区別出来るようにするため。
    • echo “This is an error” 1>&2

クォート

  • 変数置換が必要な時–>シングルクォート
  • 変数置換が不要な時–>ダブルクォート

パイプ

1パイプなら1行。複数行なら改行して2スペース空けてパイプをつなげる。

# All fits on one line
command1 | command2

# Long commands
command1 \
  | command2 \
  | command3 \
  | command4

定数

  • UPPER_SNAKE_CASE(大文字スネークケース)
  • 宣言時
    • 例)readonly HISTORY_FILE=”/path/to/hist_file”
    • 例)readonly HISTORY_FILE_NAME=”hist_file”

変数

  • 環境変数
    • 例) declare -xr VARIABLE=”PROD”
  • グローバル変数
    • 大文字始まり
    • 例) Variable
  • ローカル変数
    • local宣言付きの小文字スネークケース
    • グローバル名前空間の汚染を防ぐ意味で使う
      • 例) local lowner_snake_case
  • エクスポートする変数
    • 大文字

関数

  • function宣言する
  • 関数名はlowner_snake_case(小文字スネークケース)
    • 例)function cal_score_ave(){ return 0; }
  • 関数は必ずreturnする。正常終了は0,異常終了は0以外。
  • 全ての関数にコメントをつける。(概要、グローバル変数、引数、戻り値)
    ##########################################################
    # Cleanup files from the backup dir
    # Globals:
    #   BACKUPDIR:
    # Arguments:
    #   None
    # Returns:
    #   None
    ##########################################################
    function cleanup() {
    return 0;
    }
    
  • usage()関数をスクリプトに追記 ``` function usage() { cat «EOT Usage: $0 [-a] [-b] [-f filename] arg1 …

Description: hogehogehoge

Options: -a aaaaaaaaaa -b bbbbbbbbbb -f ffffffffff

EOT exit 1 } ```

その他注意事項

  • set -uを必ずつける

その他参考

  • コーディングスタイル
    • http://shellscript.sunone.me/tips.html
  • シェルスクリプトを書く時に気をつける九箇条
    • http://qiita.com/b4b4r07/items/9ea50f9ff94973c99ebe
  • シェルスクリプトのコーディングルール2014
    • http://qiita.com/b4b4r07/items/62d56b7de2b9d6844bb5