Debugging

shell提供了用于debugging脚本的工具。如果我们想以debug模式运行某脚本,可以在其shebang中使用一个特殊的选项:

  1. #!/bin/bash options

options是一些可以改变shell行为的选项。下表是一些可能对你有用的选项:

Short Name Description
-f noglob 禁止文件名展开(globbing)
-i interactive 让脚本以 交互 模式运行
-n noexec 读取命令,但不执行(语法检查)
-t 执行完第一条命令后退出
-v verbose 在执行每条命令前,向stderr输出该命令
-x xtrace 在执行每条命令前,向stderr输出该命令以及该命令的扩展参数

举个例子,如果我们在脚本中指定了-x例如:

  1. #!/bin/bash -x
  2. for (( i = 0; i < 3; i++ )); do
  3. echo $i
  4. done

这会向stdout打印出变量的值和一些其它有用的信息:

  1. $ ./my_script
  2. + (( i = 0 ))
  3. + (( i < 3 ))
  4. + echo 0
  5. 0
  6. + (( i++ ))
  7. + (( i < 3 ))
  8. + echo 1
  9. 1
  10. + (( i++ ))
  11. + (( i < 3 ))
  12. + echo 2
  13. 2
  14. + (( i++ ))
  15. + (( i < 3 ))

有时我们需要debug脚本的一部分。这种情况下,使用set命令会很方便。这个命令可以启用或禁用选项。使用-启用选项,+禁用选项:

  1. #!/bin/bash
  2. echo "xtrace is turned off"
  3. set -x
  4. echo "xtrace is enabled"
  5. set +x
  6. echo "xtrace is turned off again"