如何在bash中检查语法而不运行脚本?
是否有可能检查一个bash脚本语法而不执行它?
使用Perl,我可以运行perl -c 'script name'
。 有什么等价的命令bash脚本?
bash -n scriptname
也许是一个明显的警告:这个validation语法,但不会检查你的bash脚本是否试图执行一个不在你path中的命令,如ech hello
而不是echo hello
。
时间改变了一切。 这是一个提供shell脚本的在线语法检查的网站 。
我发现它是非常强大的检测常见错误。
关于ShellCheck
ShellCheck是sh / bash脚本的一个静态分析和linting工具。 它主要集中在处理典型的初学者和中级语法错误以及shell只是给出了一个神秘的错误信息或奇怪的行为的陷阱,但是它也报告了一些更为先进的问题,即angular落案例可能导致延迟失败。
Haskell源代码在GitHub上可用!
我也启用每个我写的bash脚本的'u'选项,以便做一些额外的检查:
set -u
这将报告未初始化variables的使用情况,如下面的脚本“check_init.sh”
#!/bin/sh set -u message=hello echo $mesage
运行脚本:
$ check_init.sh
将报告以下内容:
./check_init.sh[4]:消息:参数未设置。
捕获错别字非常有用
sh -n script-name
运行这个。 如果脚本中有任何语法错误,则返回相同的错误消息。 如果没有错误,那么它就不会给出任何消息。 您可以使用echo $?
立即检查echo $?
,这将返回0
确认成功没有任何错误。
它对我很好。 我在Linux操作系统Bash Shell上运行。
空命令[冒号]在debugging查看variables的值时也很有用
set -x for i in {1..10}; do let i=i+1 : i=$i done set -
IntelliJ IDEA的 BashSupport插件检查语法。
我实际上检查当前目录中的所有bash脚本的语法错误,没有使用find
工具运行它们:
例:
find . -name '*.sh' -exec bash -n {} \;
如果您想将其用于单个文件,只需使用文件的名称编辑通配符即可。