ウェブサイト検索

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


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

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

ShellCheck が行うことは主に次の 3 つです。

  • シェルで不可解なエラー メッセージが表示される原因となる、初心者向けの典型的な構文問題を指摘し、説明します。
  • シェルが奇妙で直感に反する動作を引き起こす典型的な中間レベルのセマンティック問題を指摘し、説明します。
  • また、上級ユーザーが実行していたスクリプトが将来の状況で失敗する可能性がある、微妙な注意点、例外的なケース、落とし穴についても指摘します。

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

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

ShellCheck は、次のようにパッケージ マネージャーを通じてローカルに簡単にインストールできます。

Debian/Ubuntu の場合

apt-get install shellcheck

RHEL/CentOS の場合

yum -y install epel-release
yum install ShellCheck

Fedora について

dnf install ShellCheck

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

Web から 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_NOTROOTE_MINARGS は宣言されていますが使用されておらず、ShellCheck はこれらを「示唆的なエラー」として報告しています。

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

次に、間違った名前 (ステートメント echo $E_NONROOT 内) が変数 E_NOTROOT をエコーするために使用されているため、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 を実行することもできます。上記と同じシェル スクリプトを次のように使用します。

shellcheck test.sh

テキストエディタからShellCheckを使用する

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

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

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

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

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

execute pathogen#infect()

pathogen をインストールしたら、次のように syntastic を ~/.vim/bundle に配置できます。

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

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

:Helptags

すべてがうまくいけば、ShellCheckVim と統合されているはずです。次のスクリーンショットは、上記と同じスクリプトを使用してそれがどのように動作するかを示しています。

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

  • ~/.vim/autoload ディレクトリと ~/.vim/bundle ディレクトリの両方を作成しました。
  • ~/.vimrc ファイルに、execute pathogen#infect() 行を追加しました。
  • ~/.vim/bundle 内に syntastic の git clone を作成しました。
  • 適切な権限を使用して、上記のすべてのディレクトリにアクセスします。

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

  • Emacs では、Flycheck を使用します。
  • Sublime では、SublimeLinter を使用します。
  • Atom では、Linter を使用します。
  • 他のほとんどのエディタでは、GCC エラー互換性を使用します。

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

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

それでおしまい!この記事では、ShellCheck をインストールして使用して、Linux のシェル スクリプト内のバグや不正なコードを見つける方法を説明しました。以下のコメントセクションを通じてご意見をお聞かせください。

他に同様のツールがあることをご存知ですか? 「はい」の場合は、コメントでそれらに関する情報も共有してください。