(2023-01-29 初稿 )
はじめに
筆者は、Bashスクリプトをよく利用しているが、その独自の記述方法のためにエラーが起きたり、思いどおりに動作させられないことがしばしばある。
最近、ネットで shellcheck のことを知り、シェルスクリプトの強力な助っ人になりそうなことがわかった。本記事では、ShellCheckの主な機能とインストールと簡単な使い方を紹介する。
- GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts
- ShellCheck – shell script analysis tool
ShellCheckとは
ホームページによれば、初心者から上級者までのレベルに応じたコード品質やバグの指摘を目的とするツール。オープンソースで無料であるため、shellのlintとしては、最も人気がある。
筆者は、主にシンタックスの確認、コードの最適化のために用いようと思っている。
インストールと使い方
インストール
ShellCheckのインストールは、Debian/Ubuntuであれば、以下のとおり簡単にインストールできる。
$ sudo apt-get install shellcheck
使い方
以下のように、shellスクリプトをチェックすることができる。
$ shellcheck your_script.sh
エラーの検索と対策
例えば、複数のエラーを含む以下のスクリプトを作成する。
#!/usr/bin/bash
num=2
[[ $# -ne $num ]] && {echo "error"; exit}
上記スクリプトを、shellcheckすると以下のようにエラーコードが示される。
$ shellcheck example
In example line 4:
[[ $# -ne $num ]] && {echo "error"; exit}
^-- SC1073 (error): Couldn't parse this brace group. Fix to allow more checks.
^-- SC1054 (error): You need a space after the '{'.
^-- SC1083 (warning): This } is literal. Check expression (missing ;/\n?) or quote it.
In example line 5:
^-- SC1056 (error): Expected a '}'. If you have one, try a ; or \n in front of it.
^-- SC1072 (error): Missing '}'. Fix any mentioned problems and try again.
For more information:
https://www.shellcheck.net/wiki/SC1054 -- You need a space after the '{'.
https://www.shellcheck.net/wiki/SC1056 -- Expected a '}'. If you have one, ...
https://www.shellcheck.net/wiki/SC1083 -- This } is literal. Check expressi...
今回のエラーは、{}の前後のspaceが足りないのと、{}内の「;(セミコロン)」が足りないだけなので、エラーの原因は調べるまでもないが、上記に記述があるとおり、例えば https://www.shellcheck.net/wiki/SC1056 をネットで検索すると、原因とその対策まで示してくれる。
対策まで示してくれるから、とっても便利。
念の為に書くが、以下のように修正すれば、エラーが出なくて正常動作する。
[[ $# -ne $num ]] && { echo "error"; exit; }
この他、-i や -e オプションを付けることによって、以下のことができる。
- -i オプション: みたいエラーコードを指定する。
- -e オプション: あまりにたくさんのエラーが出るときに、指定するエラー出力を除く
おわりに
ShellCheckはshellスクリプト開発者の頼りになるツールで、お役に立つことができると思われる。筆者も、これから自分のshellスクリプトをcheckして、できるだけ有益なスクリプトを作りたいなぁ…(希望的観察)。