是否有可能检查bash脚本语法而不执行它?

使用Perl,我可以运行Perl -c '脚本名称'。bash脚本是否有等效的命令?


当前回答

我还在我写的每个bash脚本上启用了'u'选项,以便做一些额外的检查:

set -u 

这将报告未初始化变量的使用情况,如以下脚本'check_init.sh'

#!/bin/sh
set -u
message=hello
echo $mesage

运行脚本:

$ check_init.sh

将报告以下内容:

./check_init.sh[4]: message:参数未设置。

对于捕捉错别字非常有用

其他回答

bash -n scriptname

也许有一个明显的警告:这验证语法,但不会检查您的bash脚本是否试图执行不在您路径上的命令,比如ech hello而不是echo hello。

仅用于验证语法:

shellcheck [programPath]

仅当语法通过时才运行程序,因此同时调试语法和执行:

外壳证明 [程序路径]

我还在我写的每个bash脚本上启用了'u'选项,以便做一些额外的检查:

set -u 

这将报告未初始化变量的使用情况,如以下脚本'check_init.sh'

#!/bin/sh
set -u
message=hello
echo $mesage

运行脚本:

$ check_init.sh

将报告以下内容:

./check_init.sh[4]: message:参数未设置。

对于捕捉错别字非常有用

Null命令[冒号]在调试查看变量值时也很有用

set -x
for i in {1..10}; do
    let i=i+1
    : i=$i
done
set - 

如果您启用了语法检查,Bash shell脚本将运行语法检查

set -o noexec

如果你想关闭语法检查

set +o noexec