and*_*ndy 361
bash -n scriptname
Run Code Online (Sandbox Code Playgroud)
也许一个明显的警告:这会验证语法,但不会检查您的bash脚本是否尝试执行不在您的路径中的命令,ech hello而不是echo hello.
小智 120
时间会改变一切.这是一个提供shell脚本在线语法检查的网站.
我发现检测常见错误非常强大.

ShellCheck是一个用于sh/bash脚本的静态分析和linting工具.它主要集中在处理典型的初学者和中级语法错误和陷阱,其中shell只是提供了一个神秘的错误消息或奇怪的行为,但它也报告了一些更高级的问题,其中角落案例可能导致延迟失败.
Haskell源代码可在GitHub上获得!
Die*_*ero 38
我还在我编写的每个bash脚本上启用'u'选项,以便进行一些额外的检查:
set -u
Run Code Online (Sandbox Code Playgroud)
这将报告未初始化变量的使用情况,例如以下脚本'check_init.sh'
#!/bin/sh
set -u
message=hello
echo $mesage
Run Code Online (Sandbox Code Playgroud)
运行脚本:
$ check_init.sh
Run Code Online (Sandbox Code Playgroud)
将报告以下内容:
./check_init.sh [4]:消息:参数未设置.
捕捉拼写错误非常有用
小智 23
sh -n script-name
Run Code Online (Sandbox Code Playgroud)
运行这个.如果脚本中存在任何语法错误,则会返回相同的错误消息.如果没有错误,那么它会在没有给出任何消息的情况下出现.您可以通过使用立即检查echo $?,这将返回0确认成功,没有任何错误.
它对我有用.我在Linux OS,Bash Shell上运行.
我实际上检查了当前目录中的所有 bash 脚本是否存在语法错误,而没有使用find工具运行它们:
例子:
find . -name '*.sh' -print0 | xargs -0 -P"$(nproc)" -I{} bash -n "{}"
如果要将它用于单个文件,只需编辑带有文件名的通配符。