如何在Shell脚本中执行语法检查调试模式

我们通过解释不同的调试选项和启动的shell脚本调试系列 如何启用shell脚本的调试模式 。 在编写shell脚本后,建议我们在运行脚本之前实际检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作。 在本系列的这一部分,我们将了解如何使用语法检查调试模式。记住我们在本系列的第一部分中解释了不同的调试选项,在这里,我们将使用它们来执行脚本调试。

启用详细调试模式

在我们移动到本指南的主要焦点,让我们简要地探索一下 详细模式 。 它是由启用 -v调试选项,它告诉shell脚本中显示所有行,而他们阅读。 为了演示如何工作的,下面是一个简单的shell脚本 批量转换PNG图像JPG格式 。 在文件中键入(或复制并粘贴)。
#!/bin/bash
#convert
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
done
exit 0
然后保存文件,并使脚本可执行使用以下命令:
$ chmod +x script.sh
我们可以调用脚本并显示其中的所有行,因为它们被shell读取,如下所示:
$ bash -v script.sh

显示Shell脚本中的所有行

在Shell脚本中启用语法检查调试模式

反观我们强调的话题, -n激活语法检查模式。它指示shell基本上读取所有命令,但不执行它们,它(shell)仅检查所使用的语法。 如果您的shell脚本中有错误,shell将在终端上输出错误,否则不显示任何内容。 激活语法检查的语法如下:
$ bash -n script.sh
因为脚本中的语法是正确的,所以上面的命令不会显示任何输出。因此,让我们尝试删除该 done词,闭合循环,看看它是否显示了一个错误: 下面是修改的shell脚本批量转换png图像到包含错误的JPG格式。
#!/bin/bash
#script with a bug
#convert
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
exit 0
保存文件,然后在执行语法检查时运行它:
$ bash -n script.sh

检查Shell脚本中的语法

从上面的输出,我们可以看到,有语法问题,我们的脚本,for循环缺少结束 done关键字词。 和壳寻找它到该文件的结束,并且一旦没有发现它( 完成 ),壳打印的语法错误:
script.sh: line 11: syntax error: unexpected end of file
我们可以将verbose模式和语法检查模式组合在一起:
$ bash -vn script.sh

在脚本中启用详细和语法检查

或者,我们可以通过修改上面脚本的第一行来启用语法检查,如下一个示例所示。
#!/bin/bash -n
#altering the first line of a script to enable syntax checking
#convert
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
exit 0
和以前一样,保存文件并在执行语法检查时运行它:
$ ./script.sh
script.sh: line 12: syntax error: unexpected end of file
此外,我们可以使用set shell built-in命令在上面的脚本中启用调试模式。 在下面的示例中,我们只检查脚本中for循环的语法。
#!/bin/bash
#using set shell built-in command to enable debugging
#convert
#enable debugging
set -n
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
#disable debugging
set +n
exit 0
再次,保存文件并调用脚本:
$ ./script.sh 
总之,我们应该总是确保我们语法检查我们的shell脚本在捕获任何错误之前执行它们。 要向我们发送有关本指南的任何问题或反馈,请使用以下回复表单。在本系列的第三部分,我们将介绍和使用shell跟踪调试模式。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏