Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208051
  • 博文数量: 39
  • 博客积分: 1057
  • 博客等级: 准尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-27 20:13
文章分类

全部博文(39)

文章存档

2012年(24)

2011年(15)

分类: Python/Ruby

2011-07-01 14:30:38

第三篇主要说些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中已经提到

这个系列未完待续...


阅读(1540) | 评论(0) | 转发(0) |
0

上一篇:shell编程技巧小结-2

下一篇:perl 引用简述

给主人留下些什么吧!~~