buhong 发表于 2018-8-27 10:40:27

shell脚本的调试

  如何调试Shell脚本
  1) 检查语法错误:
  一般来说我们可以通过修改shell脚本的源代码,令其输出相关的调试信息来定位错误,那有没有不修改源代码来调试shell脚本的方法呢?答案就是使用shell的执行选,下面是一些常用选项的用法:
  -n 只读取shell脚本,但不实际执行
  -x 进入跟踪方式,显示所执行的每一条命令
  -c "string" 从strings中读取命令
  “-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。
  “-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:
  sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'
  "-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。
  2) 调试工具-bashdb
  使用shell调试器bashdb,这是一个类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能。
  使用bashdb进行debug的常用命令
  1.列出代码和查询代码类:
  l   列出当前行以下的10行
  -   列出正在执行的代码行的前面10行
  .   回到正在执行的代码行
  w列出正在执行的代码行前后的代码
  /pat/向后搜索pat
  ?pat?向前搜索pat
  2.Debug控制类:
  h帮助
  help 命令得到命令的具体信息
  q退出bashdb
  x 算数表达式计算算数表达式的值,并显示出来
  !!空格Shell命令 参数执行shell命令
  使用bashdb进行debug的常用命令(cont.)
  控制脚本执行类:
  n   执行下一条语句,遇到函数,不进入函数里面执行,将函数当作黑盒
  s n单步执行n次,遇到函数进入函数里面
  b 行号n在行号n处设置断点
  del 行号n 撤销行号n处的断点
  c 行号n 一直执行到行号n处
  R重新启动
  Finish 执行到程序最后
  cond n expr 条件断点

页: [1]
查看完整版本: shell脚本的调试