shell 脚本调试

参数 -x 跟踪脚本

  1. shell 脚本调试参数 -x
  2. #BASH
  3. [root@74 ~]# bash -x /usr/local/keepalived/haproxy_check.sh
  4. + eth1_ip=10.0.100.74
  5. + eth0_ip=192.168.57.74
  6. + eth1_url=http://10.0.100.74:80
  7. + eth0_url=http://192.168.57.74:80
  8. ++ ps -C keepalived --no-header
  9. ++ wc -l
  10. + keepalived=0
  11. + true
  12. + failed=0
  13. + curl -IL http://192.168.57.74:80
  14. + true
  15. ++ date '+ %F_%T'
  16. + date=' 2011-12-16_11:57:51'
  17. + curl -IL http://192.168.57.74:80
  18. + curl -IL http://10.0.100.74:80
  19. + check=0
  20. + sleep 1
  21. + '[' 0 -eq 2 ']'
  22. #同样SH 也有-x 调试功能,在脚本尾部添加“abc”,然后使用-x 调试该脚本,将返回错误信息
  23. [root@74 ~]# sh -x /usr/local/keepalived/haproxy_check.sh
  24. + eth1_ip=10.0.100.74
  25. + eth0_ip=192.168.57.74
  26. + eth1_url=http://10.0.100.74:80
  27. + eth0_url=http://192.168.57.74:80
  28. ++ ps -C keepalived --no-header
  29. ++ wc -l
  30. + keepalived=0
  31. + true
  32. + failed=0
  33. + curl -IL http://192.168.57.74:80
  34. + true
  35. ++ date '+ %F_%T'
  36. + date=' 2011-12-16_11:56:37'
  37. + curl -IL http://192.168.57.74:80
  38. + curl -IL http://10.0.100.74:80
  39. + check=0
  40. + sleep 1
  41. + '[' 0 -eq 2 ']'
  42. + break 2
  43. + break 2
  44. + abc
  45. /usr/local/keepalived/haproxy_check.sh: line 40: abc: command not found

使用PS4,更详细的输出

  1. [root@74 ~]# export PS4='+{$LINENO:${FUNCNAME[0]}} '
  2. [root@74 ~]# sh -x /usr/local/keepalived/haproxy_check.sh
  3. +{6:} eth1_ip=10.0.100.74
  4. +{7:} eth0_ip=192.168.57.74
  5. +{8:} eth1_url=http://10.0.100.74:80
  6. +{9:} eth0_url=http://192.168.57.74:80
  7. ++{10:} wc -l
  8. ++{10:} ps -C keepalived --no-header
  9. +{10:} keepalived=0
  10. +{12:} true
  11. +{13:} failed=0
  12. +{15:} curl -IL http://192.168.57.74:80
  13. +{18:} true
  14. ++{19:} date '+ %F_%T'
  15. +{19:} date=' 2011-12-16_12:54:13'
  16. +{21:} curl -IL http://192.168.57.74:80
  17. +{21:} curl -IL http://10.0.100.74:80
  18. +{22:} check=0
  19. +{23:} sleep 1
  20. +{26:} '[' 0 -eq 2 ']'
  21. +{29:} break 2

参数 -n 检查语法是否错误,但不会实际执行命令!

去掉脚本 if 后边的 then 试试

  1. sh -n /usr/local/keepalived/haproxy_check.sh
  2. /usr/local/keepalived/haproxy_check.sh: line 28: syntax error near unexpected token `else'
  3. /usr/local/keepalived/haproxy_check.sh: line 28: `        else'

其它参数摘自IBM

  1. 使用shell的执行选项,本节将介绍一些常用选项的用法:
  2. -n 只读取shell脚本,但不实际执行
  3. -x 进入跟踪方式,显示所执行的每一条命令
  4. -c "string" 从strings中读取命令
  5. “-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。
  6. 在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本是否存在语法错误是一个很好的习惯。
  7. 因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,
  8. 您不得不手工做一些系统环境的恢复工作才能继续测试这个脚本。
  9. “-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。
  10. 当需要临时测试一小段脚本的执行结果时,可以使用这个选项,如下所示:
  11. sh -c 'a=1;b=2;let c=$a+$b;echo "c=$c"'
  12. "-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。
  13. “-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。
  14. "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。
  15. “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。

总结摘自IBM

  1. 调试shell脚本的过程:
  2. 首先使用“-n”选项检查语法错误,然后使用“-x”选项跟踪脚本的执行,使用“-x”选项之前,
  3. 别忘了先定制PS4变量的值来增强“-x”选项的输出信息,至少应该令其输出行号信息
  4. (先执行export PS4='+[$LINENO]',更一劳永逸的办法是将这条语句加到您用户主目录的.bash_profile文件中去),这将使你的调试之旅更轻松。
  5. 也可以利用trap,调试钩子等手段输出关键调试信息,快速缩小排查错误的范围,并在脚本中使用“set -x”及“set +x”对某些代码块进行重点跟踪。
  6. 这样多种手段齐下,相信您已经可以比较轻松地抓出您的shell脚本中的臭虫了。

结束

转载于:https://blog.51cto.com/dngood/743411

shell 脚本调试相关推荐

  1. shell脚本调试技术

    Shell脚本调试技术 曹 羽中 (caoyuz@cn.ibm.com), 软件工程师, IBM中国开发中心 曹羽中,在北京航空航天大学获得计算机软件与理论专业的硕士学位,具有数年的 unix 环境下 ...

  2. 【shell附加课】shell脚本调试方案详解

    文章目录 前言 一. shell脚本开发规范 二. shell脚本调试技巧 1. 使用echo +exit 命令断点调试 2. 使用bash命令参数调优 3. 使用 set 来调试脚本 总结 前言 最 ...

  3. shell脚本——调试(-n / -x /-c)

    我们在前面介绍的调试手段是通过修改shell脚本的源代码,从其输出相关的调试信息来定位错误的,那有没有不修改源代码来调试shell脚本的方法呢?有的,那就是使用shell的执行选项,下面将介绍一些常用 ...

  4. shell脚本调试中打开set选项

    我们在调试shell脚本的时候,不可以避免的会遇到问题,这个时候,假如我们可以跟踪到脚本到底是哪里问了问题,是哪个变量出了问题,这样就对我们的调试是很有帮助的,这里介绍一个shell里面的跟踪选项这里 ...

  5. Linux shell脚本调试

    1.调试脚本 set -e遇到执行非0时退出脚本; set-x打印执行过程; 例1 test1.sh set -e set -x echo // echo start... echo // cat / ...

  6. 如何在 Shell 脚本中执行语法检查调试模式

    我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用shell调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. ...

  7. 在 Shell 脚本中跟踪调试命令的执行

    文章目录 shell 脚本调试系列 概述 shell 跟踪执行的重要性 shell 脚本调试系列 本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的 ...

  8. 在 Shell 脚本中执行语法检查调试模式

    文章目录 shell 脚本调试系列 概述 启用 verbose 调试模式 在 Shell 脚本中启用语法检查调试模式 通过修改脚本的首行来启用脚本检查 内置的 set 命令来在脚本中启用调试模式 sh ...

  9. Linux 中启用 Shell 脚本的调试模式

    shell 脚本调试系列 Linux 中启用 Shell 脚本的调试模式 在 Shell 脚本中执行语法检查调试模式 在 Shell 脚本中跟踪调试命令的执行 概述 脚本是存储在一个文件的一系列命令. ...

最新文章

  1. 说说大型高并发高负载网站的系统架构(更新)
  2. 云原生是企业数字创新的最短路径
  3. header response in Genil
  4. HTML 字符实体 lt; gt: amp;等
  5. 奇怪,Python有的函数调用需要两对括号?(2)
  6. 安阳市2021年高考成绩查询,2021安阳市地区高考成绩排名查询,安阳市高考各高中成绩喜报榜单...
  7. VCS命令行选项总结简单脚本实例
  8. mysql只导出表数据_MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
  9. typecho图片插件_Typecho 文章缩略图插件
  10. excel建立层级_Power Pivot财务科目(层级深度amp;筛选深度)
  11. Python|判断素数
  12. nothing else left on those streets
  13. html视频播放卡顿,网页看视频卡怎么解决
  14. 程序员转行一般是因为什么,会去哪些行业?
  15. 清华大学出版社计算机绘谱,清华大学出版社-图书详情-《土木与建筑类CAD技能一级(二维计算机绘图)AutoCAD培训教程》...
  16. 在centOS中安装以及使用vim编辑器
  17. Excel下拉菜单如何制作?
  18. C# dotnet 使用 OpenXml 解析 PPT 元素的坐标和宽度高度
  19. http协议(一)/应用层
  20. 【51单片机实验】4-单片机定时/计数器的应用(附Proteus电路)

热门文章

  1. 迁移ADT/ANT构建的Android项目至Gradle,a walk through。
  2. Serializable Clonable
  3. C++中 int char 的相互转换
  4. 电脑开机老是显示explorer.exe文件损坏
  5. NanoPi NEO Air使用十二:使用自带的fbtft驱动点亮SPI接口TFT屏幕,ST7789V
  6. 全差分运算放大器ADA4940的分析
  7. HBase学习之路 (九)HBase phoenix的使用
  8. 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件
  9. JAVA NIO之Direct Buffer 与 Heap Buffer的区别?
  10. Android 程序自动更新功能模块实现