是否有任何shell(特别是bash或ksh)检查程序可以测试shell脚本的样式,最佳实践,命名约定等? (像Lint for C,或者Perl :: Critic for Perl。)
我知道使用ksh你可以通过运行ksh -n script.ksh
来进行语法检查,但我希望的不仅仅是sytax检查 - 解析/分析实际代码的东西吗?
我可能运气不好,但我觉得这样做并没有什么坏处。
答案 0 :(得分:41)
I found shellcheck:它会测试引用中的常见错误以及您忽略的其他内容("因为它可以正常工作")。
答案 1 :(得分:32)
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已按照建议in a later answer编写。与以前的建议相比,这比linting shell脚本做得更彻底。
答案 2 :(得分:7)
我写了shlint来包装checkbashims以及Brian回答中提供给shell的其他基本linting选项。
它可以通过rubygems(gem install shlint
)安装,实际上是一种插曲,但是你只需要perl(用于checkbashims)和一个符合POSIX的shell来解释shlint命令本身。应该在OSX和Ubuntu上开箱即用。