如何在不在 Linux 中运行的情况下检查 Bash 脚本的语法?
每当我们编程时,总会有机会犯某种类型的错误。在这些情况下,编译器和解释器总是在那里帮助我们,但为了使用它们,我们必须运行程序或某种IDE,它不断检查这些错误并每次都提醒我们,以便我们可以纠正它们。
如果我们不想在一个花哨的IDE中编写我们的代码,也不想运行程序,在这种情况下,我们只有很少的选择,如果有的话。如果您正在编写bash脚本,我们当然可以检查bash脚本是否有任何语法错误。
应该注意的是,我们能够检测到的语法错误只会是编译时错误,而不是运行时错误。
示例
让我们探索一个例子。假设我们有一个bash脚本,其中包含类似这样的代码-
for f in *.txt; do mv "$f" "${f// /_}"; done
上面的代码很简单,它只是遍历当前目录中存在的所有.txt文件,然后更改它们之间包含空格的文件的名称,因为它将空格替换为.txt文件_(underscores)。
这就像一个魅力,现在当我们运行命令来检查上面的bash脚本是否有任何语法错误时,我们不会得到任何输出。
让我们探讨这个特殊情况-
在您的终端中运行以下命令,其中sample.sh也存在。
bash -n sample.sh
当我运行此命令时,终端将不打印任何内容。
现在让我们对我们的进行更改,sample.sh使其成为无效的bash脚本,然后我们将在终端中再次运行相同的命令。
for f in *.txt; do mv "$f" "${f// /_}"; done = true
现在,当我们运行如下所示的命令时-
bash -n sample.sh
输出将是-
immukul@192 linux-questions-code % bash -n sample.sh sample.sh: line 1: syntax error near unexpected token `=' sample.sh: line 1: `for f in *.txt; do mv "$f" "${f// /_}"; done = true'
这就是我们能够在不运行它的情况下检查语法错误的方式。现在,我们谈到了这个命令只会检测编译时错误而不是运行时错误的事实,我们可以通过sample.sh再次更改来确认-
for d in *.txt; do mv "$f" "${f// /_}"; done
现在,当我们在sample.sh上面显示的文件上运行下面显示的命令时-
bash -n sample.sh
输出将是什么。
所以,最后的看法是,只有当您想检查语法错误时才应该使用该命令。