2012-09-22

シェルスクリプトのコーディングスタイル

指針

全ての項目に共感できたので、自分で決められるときはこのスタイルを使うようにしている。

シェルスクリプト Tips - UNIX & Linux コマンド・シェルスクリプト リファレンス: http://shellscript.sunone.me/tips.html#tips-1

課題

  • case文のインデント
  • 長いパイプの改行

case文のインデント

指針

case 文の使用方法 - UNIX & Linux コマンド・シェルスクリプト リファレンス: http://shellscript.sunone.me/case.html

選択肢

case文のスタイルはいろいろな選択肢がある。 特にシェルスクリプトではセミコロンが付く分、選択肢が多い。

  1. パターンと処理の間を改行するか
  2. 処理とセミコロンの間を改行するか
  3. case宣言とパターンの間をインデントするか

1. パターンと処理の間を改行するか

1-A

case 値 in
  パターン1 ) 処理1 ;;
  パターン2 ) 処理2 ;;
  パターン3 ) 処理3 ;;
  …
  パターンn ) 処理n ;;
esac

1-B

case 値 in
  パターン1 )
    処理1 ;;
  パターン2 )
    処理2 ;;
  パターン3 )
    処理3 ;;
  …
  パターンn )
    処理n ;;
esac

2. 処理とセミコロンの間を改行するか

2-A

case 値 in
  パターン1 )
    処理1 ;;
  パターン2 )
    処理2 ;;
  パターン3 )
    処理3 ;;
  …
  パターンn )
    処理n ;;
esac

2-B

case 値 in
  パターン1 )
    処理1
    ;;
  パターン2 )
    処理2
    ;;
  パターン3 )
    処理3
    ;;
  …
  パターンn )
    処理n
    ;;
esac

3. case宣言とパターンの間をインデントするか

3-A

case 値 in
  パターン1 )
    処理1
    ;;
  パターン2 )
    処理2
    ;;
  パターン3 )
    処理3
    ;;
  …
  パターンn )
    処理n
    ;;
esac

3-B

case 値 in
パターン1 )
  処理1
  ;;
パターン2 )
  処理2
  ;;
パターン3 )
  処理3
  ;;
…
パターンn )
  処理n
  ;;
esac

私見

  • 個人的には1-B、2-B、3-Bが好み。
  • 1-A〜2-Aまではセミコロン忘れが怖い。
  • 1-A〜3-Aまでは、4タブ以上だと横に長くなってしまう。
    • ただ、2タブなら3-Aでもいいと思っている。

長いパイプの改行

  • 1-A. 改行しない
  • 1-B. 改行してインデントする
  • 1-C. 改行してインデントしない

1-A. 改行しない

処理1 | 処理2 | 処理3 | 処理4

1-B. 改行してインデントする

処理1 |
  処理2 |
  処理3 |
  処理4

1-C. 改行してインデントしない

処理1 |
処理2 |
処理3 |
処理4

2. パイプの位置

改行した場合のパイプの位置について。

  • 2-A. 合わせる
  • 2-B. 合わせない

2-A. 合わせる

var=$(
  処理1  |
  処理10 |
  処理11
)

2-B. 合わせない

var=$(
  処理1 |
  処理10 |
  処理11
)

私見

1. 改行

  • 40文字までならA。
  • それ以上はBかC。どちらかというとB。
  • 変数への代入ならCか。

2. パイプの位置

  • パイプの位置は合わせなくていいと思っている。
    • 差が開きすぎるとパイプが見えなくなるため。