シェルスクリプトをコードレビューする時の便利な方法をメモ。
以下が今回サンプルとして利用したスクリプトです。
sample.sh
#!/bin/sh var=0 while [ $var -lt 3 ] do echo $var var=`expr $var + 1` done
文法チェック
-n
オプションを利用すると、処理は実行されず、Syntax errorを見つけてくれます。
$sh -nv sample.sh
エラーがある時は、こんな感じで出力されます。
$ sh -nv ./sample_error.sh #!/bin/sh var=0 while [ $var -lt 3 ] do echo $var var=`expr $var + 1` doen ./sample_error.sh: 9: ./sample_error.sh: Syntax error: end of file unexpected (expecting "done")
サンプルはshですが、bashでも同じです。
デバッグ表示
-x
オプションを利用すると、処理された内容をそのまま表示してくれます。
$ sh -xv sample.sh #!/bin/sh var=0 + var=0 while [ $var -lt 3 ] do echo $var var=`expr $var + 1` done + [ 0 -lt 3 ] + echo 0 0 + expr 0 + 1 + var=1 + [ 1 -lt 3 ] + echo 1 1 + expr 1 + 1 + var=2 + [ 2 -lt 3 ] + echo 2 2 + expr 2 + 1 + var=3 + [ 3 -lt 3 ]
サンプルはshですが、bashでも同じです。
Linterの利用
shellcheck
を使うと良さげでした。下記はgithubのページ。
各プラットフォーム向けにパッケージが用意されているので、パッケージからインストールできます。以下はUbuntuでの実行例。
$ sudo apt-get install shellcheck
確認したスクリプトを渡してコマンドを実行すると、問題点を指摘してくれます。
$ shellcheck sample.sh In sample.sh line 7: var=`expr $var + 1` ^-- SC2006: Use $(..) instead of legacy `..`. ^-- SC2003: expr is antiquated. Consider rewriting this using $((..)), ${} or [[ ]].
Shellcheckを実行できるWEBページも用意されており、フォームに検証したいスクリプトを貼り付けると、問題点を指摘してくれます。
WEBの場合、指摘されたメッセージをクリックすると詳細ページにリンクしてくれるので、確認だけであれば、こっちのほうが使いやすいです。
最後に、実際に修正したスクリプトです。
#!/bin/sh var=0 while [ $var -lt 3 ] do echo $var var=$((var + 1)) done