Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  shell  >  正文 shell编程技巧小结(三)

shell编程技巧小结(三)

发布时间:2014-07-20   编辑:www.jquerycn.cn
本节主要说说shell编程的调试方法。

本节主要说说shell编程的调试方法。

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

1、利用bash的的“-n”“-x”选项,最简单实用
-n:   只是将脚本都读取一遍,检查是否有语法错误
用法: bash -n my_script.sh  或者在脚本里面的“#!/bin/bash -n”,下面默认是指在脚本里面中使用选项
效果: 如果有语法错误,会提示,没有检测到语法错误,则安静的退出
  -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

这里Signal(信号)不是指系统信号,系统信号可以通过“kill -l”查看,这里的信号值得是bash shell在命令或者函数
在执行时或者执行结束时产生的信号,常用的有
EXIT    成功执行,结束状态码为“0”
ERR     没有成功执行,结束状态码非“0”
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编程技巧小结(一)中已经提到。

您可能感兴趣的文章:
shell编程技巧小结(三)
shell位置变量实现目录文件备份脚本
PHP异步执行技巧分享
shell编程技巧小结(一)
shell编程技巧小结(二)
inux shell初级入门教程
Illustrator通过实例解析图像上色经验技巧分享
photoshop处理COS照片后期调色技巧教程
photoshop文字排版技巧心得教程
linux shell变量浅析

关键词: 脚本调试   
[关闭]