OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

追踪

错误通常是脚本中意外逻辑流的情况。 也就是说,脚本的某些部分要么永远不会执行,要么以错误的顺序或在错误的时间执行。 为了查看程序的实际流程,我们使用了一种称为 追踪.

一种跟踪方法涉及在显示执行位置的脚本中放置信息性消息。 我们可以向我们的代码片段添加消息:



echo "准备删除文件" >&2

如果 [[ -d $dir_name ]]; 那么如果 cd $dir_name; 然后

echo "删除文件" >&2

R M *

其他

echo "无法 cd 到 '$dir_name'" >&2 exit 1

其他

echo "没有这样的目录:'$dir_name'" >&2 exit 1

fi

echo "文件删除完成" >&2

echo "准备删除文件" >&2

如果 [[ -d $dir_name ]]; 那么如果 cd $dir_name; 然后

echo "删除文件" >&2

R M *

其他

echo "无法 cd 到 '$dir_name'" >&2 exit 1

其他

echo "没有这样的目录:'$dir_name'" >&2 exit 1

fi

echo "文件删除完成" >&2


我们将消息发送到标准错误以将它们与正常输出分开。 我们也不缩进包含消息的行,因此更容易找到何时需要删除它们。

现在执行脚本时,可以看到文件删除已经执行:



[me@linuxbox ~]$delete-script 准备删除文件删除文件

文件删除完成 [me@linuxbox ~]$

[me@linuxbox ~]$delete-script 准备删除文件删除文件

文件删除完成 [me@linuxbox ~]$


bash 还提供了一种跟踪方法,由 -x 选项和带有 -x 选项的 set 命令实现。 使用我们之前的故障脚本,我们可以通过在第一行添加 -x 选项来激活对整个脚本的跟踪:


#!/bin/bash -x

#!/bin/bash -x

调试


# 麻烦:演示常见错误的脚本 number=1

如果 [ $number = 1 ]; 然后

echo "数字等于 1。" 别的

echo "数字不等于 1。"

fi

# 麻烦:演示常见错误的脚本 number=1

如果 [ $number = 1 ]; 然后

echo "数字等于 1。" 别的

echo "数字不等于 1。"

fi


执行后,结果如下所示:



[我@linuxbox ~]$ 麻烦

+ 数字=1

+ '[' 1 = 1 ']'

+ echo '数字等于 1。' 数字等于 1。

[我@linuxbox ~]$ 麻烦

+ 数字=1

+ '[' 1 = 1 ']'

+ echo '数字等于 1。' 数字等于 1。


启用跟踪后,我们会看到应用扩展后执行的命令。 前导加号表示轨迹的显示,以将它们与常规输出的行区分开来。 加号是跟踪输出的默认字符。 它包含在 PS4 (提示字符串 4)shell 变量。 可以调整此变量的内容以使提示更有用。 在这里,我们修改变量的内容以在执行跟踪的脚本中包含当前行号。 请注意,在实际使用提示之前,需要单引号以防止扩展:



[我@linuxbox ~]$ 导出 PS4='$LINENO + '

[我@linuxbox ~]$ 麻烦

5 + 数字=1

7 + '[' 1 = 1 ']'

8 + echo '数字等于 1。' 数字等于 1。

[我@linuxbox ~]$ 导出 PS4='$LINENO + '

[我@linuxbox ~]$ 麻烦

5 + 数字=1

7 + '[' 1 = 1 ']'

8 + echo '数字等于 1。' 数字等于 1。


要对脚本的选定部分而不是整个脚本执行跟踪,我们可以使用 用命令 -x 选项​​:


#!/斌/庆典

# 麻烦:演示常见错误的脚本 number=1

#!/斌/庆典

# 麻烦:演示常见错误的脚本 number=1



set -x # 开启追踪

如果 [ $number = 1 ]; 然后

echo "数字等于 1。" 别的

echo "数字不等于 1。"

fi

set +x # 关闭追踪


set -x # 开启追踪

如果 [ $number = 1 ]; 然后

echo "数字等于 1。" 别的

echo "数字不等于 1。"

fi

set +x # 关闭追踪


我们使用 用命令 -x 选项来激活跟踪和 +x 取消激活跟踪的选项。 此技术可用于检查麻烦脚本的多个部分。


OnWorks 的顶级操作系统云计算: