shell编程技巧小结-3

1595阅读 0评论2011-07-01 努力小伙
分类:Python/Ruby

第三篇主要说些shell编程的调试方法

    在shell脚本开发的过程中,随着里面结构和命令的越来越多,犯错误的机会就很大了,所以掌握一到两种调试方法很有用,当然关于shell script的调试方法我听过好几种,不过会用的也就这么几个方法。总之,十鸟在林,不如一鸟在手!^_^

1利用bash的的“-n”“-x”选项,最简单实用

  1. -n:   只是将脚本都读取一遍,检查是否有语法错误
  2. 用法: bash -n my_script.sh  或者在脚本里面的“#!/bin/bash -n”,下面默认是指在脚本里面中使用选项
  3. 效果: 如果有语法错误,会提示,没有检测到语法错误,则安静的退出
  -x:   调试选项,显示每条语句,以“+”开头,其后的变量都经过替换了,强烈推荐,经常与trap DEBUG配合使用trap的用法后面会提到
 
效果

 ./debug.sh 
+ trap 'echo "在 $LINENO 行之前,变量 a=$a , b=$b"' DEBUG   #这是命令行本身,以一个‘+’开头
++ echo '在 9 行之前,变量 a= , b='                         #这是输出,以两个‘++’开头
在 9 行之前,变量 a= , b=                                   #开头提示符'+'可以通过PS4调整,如PS4='*'
+ a=1
++ echo '在 10 行之前,变量 a=1 , b='
2、使用trap命令
格式:trap '命令或者函数,数量不限' Signal

  1. 这里Signal(信号)不是指系统信号,系统信号可以通过“kill -l”查看,这里的信号值得是bash shell在命令或者函数
  2. 在执行时或者执行结束时产生的信号,常用的有
  3. EXIT    成功执行,结束状态码为“0”
  4. ERR     没有成功执行,结束状态码非“0”
  5. DEBUG   用于跟踪变量的值


举例说明:

(1)ERR用法:

Error_Trap(){                          #定义一个当发现错误时调用的函数
        echo "[Line:$1] Error: exited with status $?" 
}

trap 'Error_Trap $LINENO;exit 1' ERR   #如果结束状态是ERR(也就是执行失败或者错误),就调用Error_Trap函数
                                       #然后退出,这里$LINENO是shell的内部变量,表示行号,这里是错误的位置
Test_A(){
        return 1;
}

Test_B(){
        return 2;
}

Test_A   
Test_B                         #这个函数不会被执行了,因为在发现第一个错误的时候trap提示错误后就退出了,这
                               #样只有第一个错误解决了,才会继续执行以便发现后面的错误,继续调试

(2)DEBUG用法
vim debug.sh
...
trap 'echo "在第 $LINENO 行之前,变量 a=$a , b=$b"' DEBUG   #用于跟踪变量的值
a=1
a=2
b=9
b=5
exit 0
...
3、记录脚本执行的日志
   
     在脚本开发和测试的时候,脚本执行结果和过程都是我们需要注意,这里主要说如何将脚本的执行输出记录到文件中,我平时主要用tee,在shell编程技巧小结-1中已经提到

这个系列未完待续...


上一篇:shell编程技巧小结-2
下一篇:perl 引用简述