启用详细调试模式
在我们移动到本指南的主要焦点,让我们简要地探索一下 详细模式 。 它是由启用-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脚本中的语法
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跟踪调试模式。