Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9167604
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: LINUX

2013-11-27 15:12:49

shell 脚本调试
2011-12-16 13:09:56
标签:linux shell 调试 休闲 语法
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
shell 脚本调试
参数 -x 跟踪脚本
shell 脚本调试参数 -x  
#BASH 
[root@74 ~]# bash -x /usr/local/keepalived/haproxy_check.sh  
+ eth1_ip=10.0.100.74 
+ eth0_ip=192.168.57.74 
+ eth1_url=
+ eth0_url=
++ ps -C keepalived --no-header 
++ wc -l 
+ keepalived=0 
+ true 
+ failed=0 
+ curl -IL
+ true 
++ date '+ %F_%T' 
+ date=' 2011-12-16_11:57:51' 
+ curl -IL
+ curl -IL
+ check=0 
+ sleep 1 
+ '[' 0 -eq 2 ']' 
 
#同样SH 也有-x 调试功能,在脚本尾部添加“abc”,然后使用-x 调试该脚本,将返回错误信息  
[root@74 ~]# sh -x /usr/local/keepalived/haproxy_check.sh  
+ eth1_ip=10.0.100.74 
+ eth0_ip=192.168.57.74 
+ eth1_url=
+ eth0_url=
++ ps -C keepalived --no-header 
++ wc -l 
+ keepalived=0 
+ true 
+ failed=0 
+ curl -IL
+ true 
++ date '+ %F_%T' 
+ date=' 2011-12-16_11:56:37' 
+ curl -IL
+ curl -IL
+ check=0 
+ sleep 1 
+ '[' 0 -eq 2 ']' 
+ break 2 
 
+ break 2 
+ abc
/usr/local/keepalived/haproxy_check.sh: line 40: abc: command not found
使用PS4,更详细的输出
[root@74 ~]# export PS4='+{$LINENO:${FUNCNAME[0]}} '
[root@74 ~]# sh -x /usr/local/keepalived/haproxy_check.sh  
+{6:} eth1_ip=10.0.100.74 
+{7:} eth0_ip=192.168.57.74 
+{8:} eth1_url=
+{9:} eth0_url=
++{10:} wc -l 
++{10:} ps -C keepalived --no-header 
+{10:} keepalived=0 
+{12:} true 
+{13:} failed=0 
+{15:} curl -IL
+{18:} true 
++{19:} date '+ %F_%T' 
+{19:} date=' 2011-12-16_12:54:13' 
+{21:} curl -IL
+{21:} curl -IL
+{22:} check=0 
+{23:} sleep 1 
+{26:} '[' 0 -eq 2 ']' 
+{29:} break 2 
 
参数 -n 检查语法是否错误,但不会实际执行命令!
去掉脚本 if 后边的 then 试试
sh -n /usr/local/keepalived/haproxy_check.sh  
/usr/local/keepalived/haproxy_check.sh: line 28: syntax error near unexpected token `else' 
/usr/local/keepalived/haproxy_check.sh: line 28: `        else' 
 


其它参数摘自IBM
使用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调试任务,应把其当作首选的调试手段。  
 
总结摘自IBM
调试shell脚本的过程: 
首先使用“-n”选项检查语法错误,然后使用“-x”选项跟踪脚本的执行,使用“-x”选项之前,
别忘了先定制PS4变量的值来增强“-x”选项的输出信息,至少应该令其输出行号信息
(先执行export PS4='+[$LINENO]',更一劳永逸的办法是将这条语句加到您用户主目录的.bash_profile文件中去),这将使你的调试之旅更轻松。
也可以利用trap,调试钩子等手段输出关键调试信息,快速缩小排查错误的范围,并在脚本中使用“set -x”及“set +x”对某些代码块进行重点跟踪。
这样多种手段齐下,相信您已经可以比较轻松地抓出您的shell脚本中的臭虫了。 
 
结束
本文出自 “dongnan” 博客,转载请与作者联系!
阅读(536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~