hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

ShellCheckコマンドの使い方



1 ShellCheckコマンドとは?

シェルスクリプトの構文をチェックするコマンドです。

2 検証環境

CentOS版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

3 インストール方法

ShellCheckパッケージはepelリポジトリにあるので、まず、epel-releaseパッケージをインストールします。

[root@server ~]# yum -y install epel-release

次に、ShellCheckパッケージをインストールします。

[root@server ~]# yum -y install ShellCheck

shellcheckコマンドの版数を確認します。

[root@server ~]# shellcheck -V
ShellCheck - shell script analysis tool
version: 0.3.8
license: GNU General Public License, version 3
website: http://www.shellcheck.net

4 チェック方法

4.1 テスト用シェルスクリプトの作成

テスト用のシェルスクリプトを作成します。以下のシェルスクリプトには意図的に誤りが入っています。なお、シェルスクリプトの書き方は、以下を参照してください。
https://hana-shin.hatenablog.com/entry/2022/02/11/231225

[root@server ~]# cat tp.sh
#!/usr/bin/bash

NUM_MAX=3
i=0

while ["$i" -lt ${NUM_MAX}]
do
  echo "$i"
  i=$((i+1))
done

シェルスクリプトを実行すると、以下のエラーが出力されます。

[root@server ~]# ./tp.sh
./tp.sh: 行 6: [0: コマンドが見つかりません

4.2 shellcheckによるチェック

shellcheckを実行すると、SC1009、SC1073、SC1035等のエラー番号が表示されました。

[root@server ~]# shellcheck tp.sh

In tp.sh line 6:
while ["$i" -lt ${NUM_MAX}]
^-- SC1009: The mentioned parser error was in this while loop.
      ^-- SC1073: Couldn't parse this test expression.
       ^-- SC1035: You need a space after the [ and before the ].
                           ^-- SC1020: You need a space before the ].
                           ^-- SC1072: Missing space before ]. Fix any mentioned problems and try again.

4.3 エラーコードの探し方

shellcheckが出力したエラーコードの探し方を以下に説明します。

まず、下記ページに移動します。
Home · koalaman/shellcheck Wiki · GitHub

ページ右側にエラー番号を入力するところがあります(赤枠部分)。ここに、shellcheckが出力したエラー番号を入力します。ここでは、SC1035を入力してみます。

SC1035のページが表示されますので、修正方法を確認します。[の後ろと、]の前にスペースが入っていないことがエラーの原因のようです。

4.4 スクリプトの修正

[の後ろと、]の前にスペースを入れて、シェルスクリプトを修正します。

[root@server ~]# cat tp.sh
#!/usr/bin/bash

NUM_MAX=3
i=0

while [ "$i" -lt ${NUM_MAX} ]
do
  echo "$i"
  i=$((i+1))
done

4.5 shellcheckによるチェック

修正したシェルスクリプトに対して、shellcheckを実行します。今度は、shellcheckがエラーを表示しないことがわかります。

[root@server ~]# shellcheck tp.sh

シェルスクリプトを実行します。今度はエラーなく実行することができました。

[root@server ~]# ./tp.sh
0
1
2

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ