如何在不运行Bash脚本的情况下语法检查?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不运行Bash脚本的情况下语法检查?相关的知识,希望对你有一定的参考价值。

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

使用Perl,我可以运行perl -c 'script name'。是否有针对bash脚本的等效命令?

答案
bash -n scriptname

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

另一答案

时间会改变一切。 Here is a web site,提供shell脚本的在线语法检查。

我发现检测常见错误非常强大。

About 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上运行。

另一答案

我实际检查当前目录中的所有bash脚本是否存在语法错误而不使用find工具运行它们:

例:

find . -name '*.sh' -exec bash -n {} ;

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

另一答案

null命令[colon]在调试以查看变量值时也很有用

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

BashSupport pluginIntelliJ IDEA,用于检查语法。

以上是关于如何在不运行Bash脚本的情况下语法检查?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不运行实际查询的情况下检查 JDBC 语句的 SQL 语法?

bash 脚本如何在不使用 uudecode 的情况下写出二进制文件?

如何在不折叠空格的情况下在 bash 脚本中拆分制表符分隔的字符串?

从 URL 执行 bash 脚本

如何测试用于设置新机器的 bash 脚本

如何在不单击的情况下显示片段