是否有一个静态分析工具,如Lint或Perl :: Critic for shell脚本?

Bri*_*anH 45 shell static-analysis checkstyle

是否有任何shell(特别是bash或ksh)检查程序可以测试shell脚本的样式,最佳实践,命名约定等?(像Lint for C,或Perl :: Critic for Perl.)

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

我可能运气不好,但我想这并没有伤害.

u0b*_*6ae 42

我发现了shellcheck:它测试引用中的常见错误以及您忽略的其他内容("因为它有效").

  • @Shurane - 依赖项仅用于构建,而不是用于运行可执行文件. (2认同)
  • 似乎唯一的依赖是浏览器. (2认同)

Bri*_*ell 33

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
Run Code Online (Sandbox Code Playgroud)

编辑添加:自编写此答案以来,已编写shellcheck,如后面的答案所示.与以前的建议相比,这比linting shell脚本做得更彻底.


Ros*_*gan 7

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

它可以通过rubygems(gem install shlint)安装,实际上是一种插件,但是你只需要perl(用于checkbashims)和一个符合POSIX标准的shell来解释shlint命令本身.应该在OSX和Ubuntu上开箱即用.