Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38018
  • 博文数量: 9
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-22 16:12
文章分类

全部博文(9)

文章存档

2014年(9)

我的朋友

分类: LINUX

2014-05-24 18:53:58

  sh -n script.sh 检查语法错误,不实际执行。
  sh -c "string" 执行string中的命令。
  sh -x script.sh 显示所执行的每一条命令。
   也可以对script中特定区域的块执行set -x开启跟踪模式,set +x关闭跟踪模式。
   输出的信息仅限于进行变量替换之后的每一条实际执行的命令以及行首的一个"+"号提示符,这个+就是第四级提示符变量$PS4。

 cat script.sh

点击(此处)折叠或打开

  1. #!/bin/bash
  2. echo $PS4
  3. PS4='+{$LINENO:${FUNCNAME[0]}}'
  4. trap 'function_trap' ERR
  5. function_trap()
  6. {
  7.     echo "Error status $?"
  8. }
  9. function_fail()
  10. {
  11.     return 1
  12. }
  13. function_pass()
  14. {
  15.     return 0
  16. }
  17. function_fail
  18. function_pass
  #sh -x script.sh

点击(此处)折叠或打开

  1. + echo +
  2. +
  3. + PS4='+{$LINENO:${FUNCNAME[0]}}'
  4. +{6:}trap function_trap ERR
  5. +{23:}function_fail
  6. +{15:function_fail}return 1
  7. ++{15:}function_trap
  8. ++{10:function_trap}echo 'Error status 1'
  9. Error status 1
  10. +{24:}function_pass
  11. +{20:function_pass}return 0
  $FUNCNAME是一个数组变量,包含调用链上所有的函数的名字。${FUNCNAME[0]}代表当前执行函数,1代表调用函数,以此类推。
  $LINENO代表当前行号。
  trap用于捕获指定的信号(可指定多个信号,用空格分隔)并执行预定义的命令。查看信号可以执行trap -l命令。

    script.sh执行时,产生三个“伪信号”:
     EXIT(从一个函数中退出或者整个脚本执行完毕)
     
ERR($?不为零)
     
DEBUG(每一条命令执行完毕)

  另外对于管道命令可以通过tee把中间结果导出到临时文件进行分析调试。
阅读(1785) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~