47

是否有任何 shell(特别是 bash 或 ksh)检查器可以测试 shell 脚本的样式、最佳实践、命名约定等?(类似于 C 的 Lint 或 Perl 的 Perl::Critic。)

我知道使用 ksh 你可以通过运行来进行语法检查,ksh -n script.ksh但我希望的不仅仅是语法检查——解析/分析实际代码的东西?

我可能不走运,但我想问也无妨。

4

3 回答 3

44

我发现了 shellcheck:它测试引用中的常见错误和您忽略的其他事情(“因为它有效”)。

于 2013-02-04T17:18:21.120 回答
35

Debian 和 Ubuntu 项目使用一个脚本checkbashisms,该脚本查找可能表明某人依赖于/bin/sh存在的特定模式bash

除此之外,大多数 shell 都有-n解析和报告错误的选项。您可以针对几个不同的 shell 检查您的脚本,以确保它仅使用可移植语法:

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

编辑添加:自从编写此答案以来,已编写shellcheck ,如稍后的答案中所建议的那样。与前面的建议相比,这在 linting shell 脚本方面做得更彻底。

于 2010-09-09T19:31:03.613 回答
8

我编写了shlint来包装 checkbashims 以及 Brian 的答案中提供的 shell 可用的其他基本 linting 选项。

它可以通过 ruby​​gems ( gem install shlint) 作为一种噱头安装,真的,但你只需要 perl(用于 checkbashims)和一个 POSIX 兼容的 shell 来解释 shlint 命令本身。应该在 OSX 和 Ubuntu 上开箱即用。

于 2013-05-27T23:17:02.230 回答