Chinaunix首页 | 论坛 | 博客
  • 博客访问: 533011
  • 博文数量: 39
  • 博客积分: 1046
  • 博客等级: 准尉
  • 技术积分: 895
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 16:50
文章分类

全部博文(39)

文章存档

2013年(8)

2012年(31)

分类: LINUX

2012-06-19 11:12:08

最近在看《Linux Shell 脚本攻略》(【印】Sarath Lakshman 著 门佳 译 人民邮电出版社 )
做点笔记。。

1.利用bash内建调试

点击(此处)折叠或打开

  1. personball@vostro:SHELL$cat debug.sh
  2. #!/bin/bash
  3. for i in {1..6}
  4. do
  5. set -x
  6. echo $i
  7. set +x
  8. done
  9. echo "Script executed"
  10. personball@vostro:SHELL$./debug.sh
  11. + echo 1
  12. 1
  13. + set +x
  14. + echo 2
  15. 2
  16. + set +x
  17. + echo 3
  18. 3
  19. + set +x
  20. + echo 4
  21. 4
  22. + set +x
  23. + echo 5
  24. 5
  25. + set +x
  26. + echo 6
  27. 6
  28. + set +x
  29. Script executed
  30. personball@vostro:SHELL$
另外,使用 bash -x选项调用脚本,或者在#!/bin/bash后跟-x ,也一样。




2.自定义调试信息


点击(此处)折叠或打开

  1. personball@vostro:SHELL$./debug2.sh
  2. 1
  3. 4
  4. 9
  5. 16
  6. 25
  7. 36
  8. 49
  9. 64
  10. 81
  11. 100
  12. personball@vostro:SHELL$_DEBUG=on ./debug2.sh
  13. **Debug**: 1
  14. 1
  15. **Debug**: 2
  16. 4
  17. **Debug**: 3
  18. 9
  19. **Debug**: 4
  20. 16
  21. **Debug**: 5
  22. 25
  23. **Debug**: 6
  24. 36
  25. **Debug**: 7
  26. 49
  27. **Debug**: 8
  28. 64
  29. **Debug**: 9
  30. 81
  31. **Debug**: 10
  32. 100
  33. personball@vostro:SHELL$cat debug2.sh
  34. #!/bin/bash
  35. function DEBUG()
  36. {
  37. [ "$_DEBUG" == "on" ] && $@ || :              #可理解为 ( [] && cmd1 )||:
  38. }                                             # []为真则执行$@,否则执行:(do nothing)
  39.                                               # 这里若$@为空是否导致执行:?可改写:试试。($@的值始终作为命令看待,即整个语句就是cmd1&&cmd2||cmd3  []相当于test命令)
  40. for i in {1..10}
  41. do
  42. DEBUG echo "**Debug**: $i"
  43. echo $[$i*$i]
  44. done

最后,要注意使用 sh命令调用脚本和使用bash调用脚本以及./ 方式的不同。

点击(此处)折叠或打开

  1. personball@vostro:SHELL$sh debug.sh
  2. + echo {1..6}
  3. {1..6}
  4. + set +x
  5. Script executed
  6. personball@vostro:SHELL$./debug.sh
  7. + echo 1
  8. 1
  9. + set +x
  10. + echo 2
  11. 2
  12. + set +x
  13. + echo 3
  14. 3
  15. + set +x
  16. + echo 4
  17. 4
  18. + set +x
  19. + echo 5
  20. 5
  21. + set +x
  22. + echo 6
  23. 6
  24. + set +x
  25. Script executed
  26. personball@vostro:SHELL$

*sh和bash是不同的解释器,语法上有不同(感谢 irc.freenode.net #ubuntu-cn 上的  adam8157  解惑)
*sh可以理解为当前shell的兼容模式(感谢 irc.freenode.net #ubuntu-cn 上的  MeaCulpa_  解惑)

3.更强大的脚本调试工具,可以使用 bashdb
阅读(1997) | 评论(0) | 转发(0) |
0

上一篇:perl notes

下一篇:ubuntu 图形界面无法登录

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