http://blog.csdn.net/gsnumen/article/details/8004644
shell 脚本调试方法
如果自己写的shell脚本运行崩溃时, 有种方法能提示在 什么时候 哪个文件 的 哪个函数 哪行语句 出现了问题, 是不是会帮助自己更快解决问题呢?
以下就是介绍这种方法:
1 将 mylog 放在 /etc 下
- #!/bin/bash
- # ########################################################
- # Filename: mylog
- # Description: debug shell script
- # Example:
- #
- # #!/bin/bash
- # #file: xxx.sh
- # source /etc/mylog log debug error info notice warn echo
- # mylog_error "gaga gaga gagaga\n";
- #
- ##############################################
- # Aliases are not expanded when the shell is not interactive, unless the
- #+ expand_aliases shell option is set using shopt
- shopt -s expand_aliases
- OK="\033[32m OK \033[0m";
- ERROR="\033[31m ERROR \033[0m";
- FALSE="\033[31m FALSE \033[0m";
- SUCCESS="[SUCCESS]";
- alias mylog='#';
- alias mylog_debug='#';
- alias mylog_error='#';
- alias mylog_echo='#';
- alias mylog_info='#';
- alias mylog_notice='#';
- alias mylog_warn='#';
- alias mylog_error='#';
- for i in $@
- do
- case "$i" in
- "log")
- alias mylog='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO ';
- ;;
- "info")
- alias mylog_info='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [INFO] ';
- ;;
- "notice")
- alias mylog_notice='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [NOTICE] ';
- ;;
- "warn")
- alias mylog_warn='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [WARN] ';
- ;;
- "debug")
- alias mylog_debug='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [DEBUG] ';
- ;;
- "error")
- alias mylog_error='echo -ne $(/bin/date +%Y-%m-%d) $(/bin/date +%H:%M:%S) $(basename $0) $FUNCNAME\(\) $LINENO [ERROR] ';
- ;;
- "echo")
- alias mylog_echo='echo ';
- ;;
- *)
- ;;
- esac
- done
2 使用
- #!/bin/bash
- # ########################################################
- # Filename: checkrun.sh
- # Description:
- # 验证 mylog 的用法
- # Example:
- # ########################################################
- source /etc/mylog log debug error info notice warn echo
- function check_apache()
- {
- #xxx;
- mylog "normal running\n";
- }
- function check_mysql()
- {
- #xxx;
- mylog_debug "normal running\n";
- }
- function check_nginx()
- {
- #xxx;
- mylog_error "normal running\n";
- }
- function check_squid()
- {
- #xxx;
- mylog_info "normal running\n";
- }
- function check_varnish()
- {
- #xxx;
- mylog_notice "normal running\n";
- }
- function check_tomcat()
- {
- #xxx;
- mylog_warn "normal running\n";
- }
- function check_myprog()
- {
- #xxx;
- mylog_echo "normal running";
- }
- function check_all()
- {
- check_apache;
- check_mysql;
- check_nginx;
- check_squid;
- check_varnish;
- check_tomcat;
- check_myprog;
- }
- check_all;
3 运行结果
- $> ./checkrun.sh
- 2012-09-21 16:03:04 checkrun.sh check_apache() 15 normal running
- 2012-09-21 16:03:04 checkrun.sh check_mysql() 21 [DEBUG] normal running
- 2012-09-21 16:03:04 checkrun.sh check_nginx() 27 [ERROR] normal running
- 2012-09-21 16:03:04 checkrun.sh check_squid() 33 [INFO] normal running
- 2012-09-21 16:03:04 checkrun.sh check_varnish() 39 [NOTICE] normal running
- 2012-09-21 16:03:04 checkrun.sh check_tomcat() 45 [WARN] normal running
- normal running
4 调试
你可以根据打印的日志信息定位错误, 如
- 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脚本调试的基本原理和实践技巧。 #### 使用Echo输出信息 **概述:** - 在Shell脚本调试中最基础也是最常用的方法之一就是使用`...
本文档是一份针对Shell脚本调试的学习笔记,详细介绍了几种常见的调试方法和工具,帮助运维人员快速定位并修复脚本中的问题。 首先,需要了解的是Linux与Windows在文本文件行结束标志上的差异。在Linux系统中,文本...
Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...
IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...
在linux下编辑脚本是很多linux程序员经常做的事情,但是有些时候脚本的执行出现一些莫名其妙的错误。 好在shell支持脚本调试,通过这个教程,会帮助尽快的找出shell脚本中的问题。
然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入探讨如何在Android应用中执行shell脚本以及相关知识点。 首先,我们需要理解Android的沙箱机制。每...
Shell脚本调试.mp4,Linux shell编程培训视频课程,大厂内部员工培训视频资料,都是纯干货,欢迎下载学习!
10. **脚本调试**:`set -x`开启命令追踪,显示脚本执行的每个步骤;`set -v`开启命令回显,显示脚本中的每一行。 通过阅读和实践"shell脚本大全"中的例子,你可以逐步掌握这些概念,并学会如何编写自己的脚本来...
Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...
#### 二、Shell脚本调试技术介绍 为了更好地解决逻辑错误,Shell提供了多种调试工具和技术,其中包括`trap`、`tee`、调试钩子和Shell选项等。 ##### 1. `trap`命令 `trap`是Linux中的一个内置命令,主要用于捕获...
5. 脚本调试和测试:学习使用调试工具和方法对脚本进行错误检测和问题诊断,以及如何编写测试用例确保脚本的稳定性和可靠性。 6. 脚本优化和安全:了解如何优化Shell脚本的性能,同时学习编写安全的脚本以防止常见...
shell脚本编程基础知识点 shell脚本是Linux操作...本资源摘要信息提供了shell脚本编程的基础知识点,包括shell脚本的基本结构、编写、执行、控制结构、调试、应用、优点、举例、注意事项和高级应用等方面的知识点。
《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...
以上只是Shell脚本编程的一部分基础内容,深入学习还包括脚本调试、文件处理、网络通信、系统管理等方面。"高级Shell脚本编程.CHM"这个文档将为你提供更详细的指导,包括各种指令的用法、示例及实践技巧,帮助你提升...
#### 四、Shell脚本调试技巧 - **使用`set -x`进行调试**:在脚本开始处加入`set -x`,可以打印出每条执行的命令及其参数。 - **日志记录**:将关键信息输出到日志文件中,有助于追踪问题原因。 - 示例: ```bash...
10. **脚本调试**:`set -x`开启命令行调试模式,可以看到脚本逐行执行的情况;`set -v`则会显示脚本中的所有命令。 11. **环境变量和别名**:理解`PATH`、`HOME`等系统环境变量,以及如何设置和使用用户自定义环境...