`
scm002
  • 浏览: 309700 次
社区版块
存档分类
最新评论

shell 脚本调试方法

 
阅读更多

http://blog.csdn.net/gsnumen/article/details/8004644

shell 脚本调试方法

 

如果自己写的shell脚本运行崩溃时, 有种方法能提示在 什么时候  哪个文件 的 哪个函数  哪行语句 出现了问题, 是不是会帮助自己更快解决问题呢? 

以下就是介绍这种方法:

 

1 将 mylog 放在 /etc 下

 

[cpp] view plaincopy
 
  1. #!/bin/bash  
  2. # ########################################################  
  3. # Filename: mylog  
  4. # Description: debug shell script  
  5. # Example:  
  6. #  
  7. #    #!/bin/bash  
  8. #    #file: xxx.sh  
  9. #     source /etc/mylog log debug error info notice warn echo  
  10. #     mylog_error "gaga gaga gagaga\n";  
  11. #  
  12. ##############################################   
  13.   
  14. #  Aliases  are  not  expanded  when  the  shell  is  not  interactive, unless the  
  15. #+ expand_aliases shell option is set using shopt  
  16. shopt -s expand_aliases  
  17.   
  18. OK="\033[32m OK \033[0m";  
  19. ERROR="\033[31m ERROR \033[0m";  
  20. FALSE="\033[31m FALSE \033[0m";  
  21. SUCCESS="[SUCCESS]";  
  22.   
  23. alias mylog='#';  
  24. alias mylog_debug='#';  
  25. alias mylog_error='#';  
  26. alias mylog_echo='#';  
  27. alias mylog_info='#';  
  28. alias mylog_notice='#';  
  29. alias mylog_warn='#';  
  30. alias mylog_error='#';  
  31.   
  32. for i in $@  
  33. do  
  34.     case "$i" in  
  35.         "log")  
  36.             alias mylog='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO ';  
  37.             ;;  
  38.         "info")  
  39.              alias mylog_info='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [INFO] ';  
  40.             ;;  
  41.         "notice")  
  42.              alias mylog_notice='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [NOTICE] ';  
  43.             ;;  
  44.         "warn")  
  45.              alias mylog_warn='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [WARN] ';  
  46.             ;;  
  47.         "debug")  
  48.              alias mylog_debug='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [DEBUG] ';  
  49.             ;;  
  50.         "error")  
  51.              alias mylog_error='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [ERROR] ';  
  52.             ;;  
  53.         "echo")  
  54.              alias mylog_echo='echo ';  
  55.             ;;  
  56.         *)  
  57.             ;;  
  58.     esac  
  59. done  



2 使用

 

[cpp] view plaincopy
 
  1. #!/bin/bash  
  2. # ########################################################  
  3. # Filename: checkrun.sh  
  4. # Description:  
  5. #   验证 mylog 的用法  
  6. # Example:  
  7. # ########################################################  
  8.   
  9.   
  10. source /etc/mylog log debug error info notice warn echo  
  11.   
  12. function check_apache()  
  13. {  
  14.     #xxx;  
  15.     mylog "normal running\n";  
  16. }  
  17.   
  18. function check_mysql()  
  19. {  
  20.     #xxx;  
  21.     mylog_debug "normal running\n";   
  22. }  
  23.   
  24. function check_nginx()  
  25. {  
  26.     #xxx;  
  27.     mylog_error "normal running\n";   
  28. }  
  29.   
  30. function check_squid()  
  31. {  
  32.     #xxx;  
  33.     mylog_info "normal running\n";   
  34. }  
  35.   
  36. function check_varnish()  
  37. {  
  38.     #xxx;  
  39.     mylog_notice "normal running\n";   
  40. }  
  41.   
  42. function check_tomcat()  
  43. {  
  44.     #xxx;  
  45.     mylog_warn "normal running\n";   
  46. }  
  47.   
  48. function check_myprog()  
  49. {  
  50.     #xxx;  
  51.     mylog_echo "normal running";   
  52. }  
  53.   
  54.   
  55.   
  56. function check_all()  
  57. {  
  58.     check_apache;  
  59.     check_mysql;  
  60.     check_nginx;  
  61.     check_squid;  
  62.     check_varnish;  
  63.     check_tomcat;  
  64.     check_myprog;  
  65. }  
  66.   
  67. check_all;  

 

 

3 运行结果 

[php] view plaincopy
 
  1. $> ./checkrun.sh   
  2. 2012-09-21 16:03:04 checkrun.sh check_apache() 15 normal running  
  3. 2012-09-21 16:03:04 checkrun.sh check_mysql() 21 [DEBUG] normal running  
  4. 2012-09-21 16:03:04 checkrun.sh check_nginx() 27 [ERROR] normal running  
  5. 2012-09-21 16:03:04 checkrun.sh check_squid() 33 [INFO] normal running  
  6. 2012-09-21 16:03:04 checkrun.sh check_varnish() 39 [NOTICE] normal running  
  7. 2012-09-21 16:03:04 checkrun.sh check_tomcat() 45 [WARN] normal running  
  8. normal running  

 

4 调试

你可以根据打印的日志信息定位错误, 如

 

[php] view plaincopy
 
  1. 2012-09-21 16:03:04 checkrun.sh check_nginx() 27 [ERROR] normal running  

 

是说: 在 2012-09-21 16:03:04 执行脚本 checkrun.sh 的 check_nginx() 函数 在第 27 行左右发生了错误.

 

Good luck.

分享到:
评论

相关推荐

    shell脚本调试技术

    详细介绍了shell脚本的调试技术,对编写shell时很有指导意义

    Shell脚本调试技术

    shell编程在unix/linux世界中使用得非常广泛,熟练掌握shell编程也是成为一名优秀的unix/linux开发者和系统管理员的必经之路。...本文将系统地介绍一些重要的shell脚本调试技术,希望能对shell的初学者有所裨益。

    linux运维学习笔记:Shell脚本调试.pdf

    linux运维学习笔记:Shell脚本调试

    linux shell 脚本调试

    在linux下编辑脚本是很多linux程序员经常做的事情,但是有些时候脚本的执行出现一些莫名其妙的错误。 好在shell支持脚本调试,通过这个教程,会帮助尽快的找出shell脚本中的问题。

    Shell脚本专家指南

    Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...

    shell 调试方法

    Linux系统中的Shell脚本调试技术,一种很好的脚本调试方法

    Linux Shell调试技术

    详细的分析了shell脚本所用的各种调试办法,对于初学者和需要熟练掌握shell的人都有很大的帮助。

    Linux Shell脚本系列教程(七):脚本调试.docx

    Linux Shell脚本系列教程(七):脚本调试.docx

    自学shell脚本

    shell脚本,shell调试,shell函数

    shell 脚本 如何双击运行脚本 脚本双击闪退调试 脚本中创建脚本

    脚本创建过程 给脚本传递参数 如何双击运行脚本 脚本双击闪退调试 脚本中创建脚本 shell限制命令运行时间 shell同时运行多条命令

    根据《Shell脚本编程详解》第12章节-Shell脚本编程,自己写的shell脚本。

    根据《Shell脚本编程详解》第12章节-Shell脚本编程,自己写的shell脚本。大部分的已经实现,在Ubuntu18环境调试过。比较基础的shell脚本。供初学者参考。

    shell脚本实现云存储 s3 v4签名,并上传文件到云存储

    2、适用于云存储的开发过程中,作为一个调试工具,来验证接口和参数是否正确,在shell脚本中修改调试参数,灵活方便。也可用于搭建轻量级的应用环境。 3、我的测试环境是centos7,脚本依赖的命令都是centos系统自带...

    linux shell 调试工具

    linux shell 调试工具 bash 可以设置断点、单步跟踪; 查看指令、变量值 等等 安装: tar -xvfz bashdb-5.0-1.1.2.tar.gz cd ./ bashdb-5.0-1.1.2 ./configuration make make install 使用: bashdb + 需要调试的脚本...

    用内置变量调试shell脚本的方法

    一般的shell脚本的调试基本都是echo 来处理遇到比较大的脚本的时候,就比较麻烦了,出了问题,还不是很好定位哪行代码出问题了。其实shell内置的一些变量可以很好的解决这个问题: $LINENO $FUNCNAME $BASH_LINENO ...

Global site tag (gtag.js) - Google Analytics