如何在不运行Bash脚本的情况下语法检查?
题
是否可以在不执行bash脚本语法的情况下检查它?
使用Perl,我可以运行 perl -c'脚本名称'
。是否有针对bash脚本的等效命令?
解决方案
bash -n scriptname
也许一个明显的警告:这会验证语法,但不会检查你的bash脚本是否尝试执行不在你的路径中的命令,比如 ech hello
而不是 echo hello 代码>
其他提示
时间会改变一切。 这是一个网站,提供shell脚本的在线语法检查。
我发现检测常见错误非常有用。
关于ShellCheck
ShellCheck 是sh / bash脚本的静态分析和linting工具。它主要侧重于处理典型的初学者和中级语法错误以及shell只是给出一个神秘的错误消息或奇怪的行为的陷阱,但它也报告了一些更高级的问题,其中极端情况可能导致延迟失败。
Haskell源代码可在GitHub上获得!
我还在我编写的每个bash脚本上启用'u'选项,以便进行一些额外的检查:
set -u
这将报告未初始化变量的使用情况,例如以下脚本'check_init.sh'
#!/bin/sh
set -u
message=hello
echo $mesage
运行脚本:
$ check_init.sh
将报告以下内容:
./ check_init.sh [4]:消息:未设置参数。
捕获拼写错误非常有用
sh -n script-name
运行它。如果脚本中存在任何语法错误,则会返回相同的错误消息。
如果没有错误,那么它会在没有给出任何消息的情况下出现。您可以使用 echo $?
立即检查,它将返回 0
确认成功,没有任何错误。
这对我有用。我在Linux OS,Bash Shell上运行。
我实际检查当前dir中的所有bash脚本是否存在语法错误而不使用 find
工具运行它们:
示例:强>
找到。 -name'* .sh'-exec bash -n {} \;
如果要将其用于单个文件,只需使用文件名编辑通配符。
null命令[冒号]在调试以查看变量值
时也很有用set -x
for i in {1..10}; do
let i=i+1
: i=$i
done
set -
BashSupport插件 www.jetbrains.com/idea/“rel =”nofollow“> IntelliJ IDEA ,用于检查语法。