web-dev-qa-db-ja.com

LintやPerl :: Critic for Shellスクリプトのような静的分析ツールはありますか?

シェルスクリプトのスタイル、ベストプラクティス、命名規則などをテストするシェル(具体的にはbashまたはksh)チェッカーはありますか? (Lint forCやPerl :: Critical for Perlのようなもの。)

Kshを使用すると、ksh -n script.kshを実行して構文チェックを実行できることは知っていますが、構文チェックだけでなく、実際のコードを解析/分析するものを望んでいましたか?

運が悪かったのかもしれませんが、聞いても大丈夫だと思います。

45
BrianH

DebianおよびUbuntuプロジェクトは、スクリプト checkbashisms を使用します。このスクリプトは、誰かが/bin/shbashであることに依存していることを示す可能性のある特定のパターンを探します。

それを超えて、ほとんどのシェルには、エラーを解析して報告するための-nオプションがあります。スクリプトをいくつかの異なるシェルと照合して、移植可能な構文のみを使用していることを確認できます。

for Shell in zsh ksh bash dash sh
do
  echo "Testing ${Shell}"
  ${Shell} -n my_script.sh
done

edit to add:この回答を書いたので、 shellcheck が書かれました、提案されたように 後の回答で 。これは、以前の提案よりもはるかに徹底的なシェルスクリプトのリンティングを行います。

33
Brian Campbell

shellcheckを見つけました :引用やその他の見落としがちな一般的なエラーをテストします(「機能するため」)。

42
u0b34a0f6ae

ブライアンの答えで提示されたシェルで利用可能なチェックバシムと他の基本的なリンティングオプションをラップするために shlint と書きました。

Rubygems経由でインストール可能です(gem install shlint)ギャグのようなものですが、shlintコマンド自体を解釈するには、Perl(checkbashims用)とPOSIX準拠のシェルのみが必要です。 OSXとUbuntuではそのままで動作するはずです。

7
Ross Duggan