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

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脚本调试的基本原理和实践技巧。 #### 使用Echo输出信息 **概述:** - 在Shell脚本调试中最基础也是最常用的方法之一就是使用`...

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

    本文档是一份针对Shell脚本调试的学习笔记,详细介绍了几种常见的调试方法和工具,帮助运维人员快速定位并修复脚本中的问题。 首先,需要了解的是Linux与Windows在文本文件行结束标志上的差异。在Linux系统中,文本...

    Shell脚本学习教程PDF版

    Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...

    IDEA中编写并运行shell脚本的实现

    IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...

    linux shell 脚本调试

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

    android系统中调用shell脚本

    然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入探讨如何在Android应用中执行shell脚本以及相关知识点。 首先,我们需要理解Android的沙箱机制。每...

    Shell脚本调试.mp4

    Shell脚本调试.mp4,Linux shell编程培训视频课程,大厂内部员工培训视频资料,都是纯干货,欢迎下载学习!

    shell脚本大全

    10. **脚本调试**:`set -x`开启命令追踪,显示脚本执行的每个步骤;`set -v`开启命令回显,显示脚本中的每一行。 通过阅读和实践"shell脚本大全"中的例子,你可以逐步掌握这些概念,并学会如何编写自己的脚本来...

    Shell脚本专家指南

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

    Linux Shell调试技术

    #### 二、Shell脚本调试技术介绍 为了更好地解决逻辑错误,Shell提供了多种调试工具和技术,其中包括`trap`、`tee`、调试钩子和Shell选项等。 ##### 1. `trap`命令 `trap`是Linux中的一个内置命令,主要用于捕获...

    Shell 脚本专家指南

    5. 脚本调试和测试:学习使用调试工具和方法对脚本进行错误检测和问题诊断,以及如何编写测试用例确保脚本的稳定性和可靠性。 6. 脚本优化和安全:了解如何优化Shell脚本的性能,同时学习编写安全的脚本以防止常见...

    Shell脚本-从入门到精通.ppt

    shell脚本编程基础知识点 shell脚本是Linux操作...本资源摘要信息提供了shell脚本编程的基础知识点,包括shell脚本的基本结构、编写、执行、控制结构、调试、应用、优点、举例、注意事项和高级应用等方面的知识点。

    Linux 命令与Shell 脚本编程pdf书籍

    《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...

    高级Shell脚本编程.zip

    以上只是Shell脚本编程的一部分基础内容,深入学习还包括脚本调试、文件处理、网络通信、系统管理等方面。"高级Shell脚本编程.CHM"这个文档将为你提供更详细的指导,包括各种指令的用法、示例及实践技巧,帮助你提升...

    shell脚本学习指南,中文清晰带书签

    #### 四、Shell脚本调试技巧 - **使用`set -x`进行调试**:在脚本开始处加入`set -x`,可以打印出每条执行的命令及其参数。 - **日志记录**:将关键信息输出到日志文件中,有助于追踪问题原因。 - 示例: ```bash...

    shell脚本.pdf

    10. **脚本调试**:`set -x`开启命令行调试模式,可以看到脚本逐行执行的情况;`set -v`则会显示脚本中的所有命令。 11. **环境变量和别名**:理解`PATH`、`HOME`等系统环境变量,以及如何设置和使用用户自定义环境...

Global site tag (gtag.js) - Google Analytics