ShellCheck-シェルスクリプトの警告と提案を表示するツール


ShellCheckは、bash/shシェルスクリプトの不正なコードに関する警告と提案を表示する静的分析ツールです。いくつかの方法で使用できます。https://www.shellcheck.netのオンラインエディター(Ace – JavaScriptで記述されたスタンドアロンコードエディター)にシェルスクリプトを貼り付けることでWebから(常に最新のgitに同期されます)コミットし、ShellCheckを実行する最も簡単な方法です)。

または、マシンにインストールしてターミナルから実行し、テキストエディターやビルドスイートまたはテストスイートと統合することもできます。

ShellCheckが主に行うことは3つあります。

  • It points out and explains typical beginner’s syntax issues that cause a shell to give cryptic error messages.
  • It points out and explains typical intermediate level semantic problems that cause a shell to behave strangely and counter-intuitively.
  • It also points out subtle caveats, corner cases and pitfalls that may cause an advanced user’s otherwise working script to fail under future circumstances.

この記事では、ShellCheckをさまざまな方法でインストールして使用し、Linuxのシェルスクリプトのバグや不正なコードを見つける方法を紹介します。

LinuxでShellCheckをインストールして使用する方法

図に示すように、ShellCheckはパッケージマネージャーを介してローカルに簡単にインストールできます。

# apt-get install shellcheck
# yum -y install epel-release
# yum install ShellCheck
# dnf install ShellCheck

ShellCheckをインストールしたら、前述のさまざまな方法でShellCheckを使用する方法を見てみましょう。

https://www.shellcheck.netにアクセスし、提供されているAceエディターにスクリプトを貼り付けます。以下のスクリーンショットに示すように、エディターの下部に出力が表示されます。

次の例では、テストシェルスクリプトは次の行で構成されています。

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;

上のスクリーンショットから、最初の2つの変数E_NOTROOTとE_MINARGSが宣言されていますが、使用されていません。ShellCheckはこれらを「示唆的なエラー」として報告します。

SC2034: E_NOTROOT appears unused. Verify it or export it.
SC2034: E_MINARGS appears unused. Verify it or export it. 

次に、変数E_NOTROOTをエコーするために(ステートメントechoで)間違った名前が使用されたため、ShellCheckはエラーを表示します。

SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is

ここでもechoコマンドを見ると、変数が二重引用符で囲まれていないため(グロブや単語の分割を防ぐのに役立ちます)、シェルチェックで次の警告が表示されます。

SC2086: Double quote to prevent globbing and word splitting.

コマンドラインからShellCheckを実行することもできます。上記と同じシェルスクリプトを次のように使用します。

$ shellcheck test.sh

ShellCheckの提案と警告は、さまざまなエディターで直接表示することもできます。これは、ShellCheckを使用するより効率的な方法であり、ファイルを保存すると、コード内のエラーが表示されます。

Vimでは、ALEまたはSyntasticを使用します(これを使用します)。

Syntasticを簡単にインストールできるように、Pathogenをインストールすることから始めます。以下のコマンドを実行して、病原体.vimファイルとそれに必要なディレクトリを取得します。

# mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

次に、これを〜/ .vimrcファイルに追加します。

execute pathogen#infect()

病原体をインストールしたら、次のようにsyntasticを〜/ .vim/bundleに入れることができます。

# cd ~/.vim/bundle && git clone --depth=1 https://github.com/vim-syntastic/syntastic.git

次に、vimを閉じて起動し、リロードしてから、以下のコマンドを入力します。

:Helptags

すべてがうまくいけば、ShellCheckをVimと統合する必要があります。次のスクリーンショットは、上記と同じスクリプトを使用してどのように機能するかを示しています。

上記の手順を実行した後にエラーが発生した場合は、Pathogenが正しくインストールされていない可能性があります。手順をやり直しますが、これにより、次のことを確実に実行できます。

  • Created both the ~/.vim/autoload and ~/.vim/bundle directories.
  • Added the execute pathogen#infect() line to your ~/.vimrc file.
  • Did the git clone of syntastic inside ~/.vim/bundle.
  • Use appropriate permissions to access all of the above directories.

他のエディターを使用して、次のようなシェルスクリプトの不正なコードをチェックすることもできます。

  • In Emacs, use Flycheck.
  • In Sublime, employ SublimeLinter.
  • In Atom, make use of Linter.
  • In most other editors, use GCC error compatibility.

注:ShellCheckingをさらに実行するには、不正なコードのギャラリーを使用してください。

ShellCheck Githubリポジトリ:https://github.com/koalaman/shellcheck

それでおしまい!この記事では、ShellCheckをインストールして使用し、Linuxのシェルスクリプトのバグや不正なコードを見つける方法を示しました。以下のコメントセクションを介して私たちとあなたの考えを共有してください。

他に似たようなツールを知っていますか?はいの場合は、コメントでもそれらに関する情報を共有してください。