如何在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 {} \;

如果您想将其用于单个文件,只需使用文件的名称编辑通配符即可。