ShellCheckでシェルスクリプトの静的解析を実行する手順を記載します。
Table of Contents
1 ShellCheckをインストールする
Ubuntuの場合はshellcheckパッケージをインストールします。
$ sudo apt install -y shellcheck
CentOSの場合はEPELからShellCheckパッケージをインストールします。
$ sudo yum install -y epel-release $ sudo yum install -y ShellCheck
2 ShellCheckで静的解析を実行する
次のコードに対して静的解析を実行します。
$ cat SC2068.sh #!/bin/sh for arg in $@; do echo arg = "${arg}" done
$@をダブルコーテーションで括っていないというエラーが出力されます。
$ shellcheck SC2068.sh In SC2068.sh line 3: for arg in $@; do ^-- SC2068: Double quote array expansions, otherwise they're like $* and break on spaces.
3 サポートしているシェルの種類
サポートしているシェルはsh, bash, kshです。それぞれのシェルのシンタックスに合わせた検出結果になります。
シェルの種類はシェバングを見て決めますが、シェバングがない場合などの為に-sオプションでシェルの種類を設定することができます。
$ shellcheck -s sh <script>
4 出力フォーマットの種類
エディタやJenkinsで利用できるフォーマットがサポートされています。
4.1 gcc
-f gccオプションでGCCライクな出力になります。
$ shellcheck -f gcc <script>
これはemacs上などで該当箇所にジャンプするのに便利です。以下はCompile commandでshellcheckを実行したものです。
4.2 checkstyle
-f checkstyleオプションでcheckstyleフォーマットの出力になります。これはJenkinsのCheckstyle Pluginで読み込むことができます。
なお、shellcheckは検出があると戻り値が偽となります。ビルドエラーを回避する為、プロジェクトの設定で"Build"の"Execute shell"にて、shellcheckの戻り値が偽の際にtrueコマンドを実行します。
shellcheck -f checkstyle <script> > checkstyle.xml || true
作成されたcheckstyle.xmlを"Post-build Actions"の"Publish Checkstyle analysis results"で読み込ませると以下のようになります。