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のページが表示されますので、修正方法を確認します。[の後ろと、]の前にスペースが入っていないことがエラーの原因のようです。
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ