是否有任何一种shell(特别是bash或ksh)检查器,可以检测shell脚本的风格、最佳实践、命名约定等?(类似于用于C的Lint或用于Perl的Perl ::Critic。)
我知道使用ksh可以通过运行ksh-n script.ksh
进行语法检查,但我希望能够进行更多的操作,例如解析/分析实际代码?
我可能没那么幸运,不过问问也无妨。
是否有任何一种shell(特别是bash或ksh)检查器,可以检测shell脚本的风格、最佳实践、命名约定等?(类似于用于C的Lint或用于Perl的Perl ::Critic。)
我知道使用ksh可以通过运行ksh-n script.ksh
进行语法检查,但我希望能够进行更多的操作,例如解析/分析实际代码?
我可能没那么幸运,不过问问也无妨。
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 已经被开发出来了,正如后来的回答所建议的那样。它比之前的建议更彻底地检测 shell 脚本。
我编写了shlint来包装checkbashims和其他基本的 shell 代码检查选项,这些选项在Brian的回答中提供。
它可以通过rubygems进行安装(gem install shlint
),实际上只是一种玩笑,但你只需要perl (用于checkbashims) 和一个符合POSIX标准的shell来解释shlint命令本身。应该可以在OSX和Ubuntu上直接使用。
shellcheck
:brew install shellcheck
。 - mklement0