当脚本不能正常工作时,我们需要确定问题的位置。
UNIX/Linux shell 提供了调试模式。
在调试模式下运行整个脚本或者只是脚本的一部分。
要在调试模式下运行整个脚本,请在第一行的 #!/bin/[shell] 后添加 -x:
例如 :
#!/bin/sh -x
要从命令行以调试模式运行整个脚本,请将 -x 添加到用于执行脚本的 sh 命令:
$ sh -x script_name
欢迎来到之路教程(on itroad-com)
带有 set -x 选项的调试模式示例
以下示例显示为脚本打开并在最后关闭的调试模式。
# cat script.sh #!/bin/sh set -x echo "Your home is : $HOME" set +x
# ./script.sh + echo 'Your home is : /home/user' Your home is : /home/user + set +x
带有 set -v 选项的调试模式示例
以下示例显示为脚本打开的 -v 调试模式。
此选项:
- 在执行之前打印语句但没有前导 +(与 -x 选项显示的不同)。
- 不翻译元字符;因此,它完全按照脚本中的方式打印语句。
- 打印注释行。
# cat script.sh #!/bin/sh set -v echo "Your home is : $HOME" set +v
# ./script.sh echo "Your home is : $HOME" Your home is : /home/user set +v
调试语句选项
在调试模式下运行脚本的多个部分,方法是将 set -x 选项放置在调试开始的位置,并将 set +x 选项放置在我们希望停止的位置。
根据需要在脚本中多次执行此操作。
调试选项如下表所示:
选项 | 含义 |
---|---|
set -x | 在解释元字符和变量后打印语句 |
set +x | 停止打印报表 |
set -v | 在解释元字符和变量之前打印语句 |
set -f | 禁用文件名生成(使用元字符) |
set -v 语句类似于 set -x,不同之处在于它在 shell 执行任何解释或者替换之前显示语句行。
当我们使用这两个选项时,通过 set -xv,shell 会在解释和替换之前和之后显示语句行,以便我们可以看到 shell 如何使用脚本中的语句行。
对于 shell 脚本中的以下语句:
echo $HOME # echo the HOME directory path
解释前的语句行 (set -v) 是:
echo $HOME # echo the HOME directory path
解释(set-x)之后的语句行是:
+ echo /home/user
如果这两个选项都打开,则 -v 行始终显示在 -x 行之前。
此外,+ 字符不在 -v 行之前。
日期:2020-09-17 00:13:29 来源:oir作者:oir