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时很有指导意义
shell编程在unix/linux世界中使用得非常广泛,熟练掌握shell编程也是成为一名优秀的unix/linux开发者和系统管理员的必经之路。...本文将系统地介绍一些重要的shell脚本调试技术,希望能对shell的初学者有所裨益。
linux运维学习笔记:Shell脚本调试
在linux下编辑脚本是很多linux程序员经常做的事情,但是有些时候脚本的执行出现一些莫名其妙的错误。 好在shell支持脚本调试,通过这个教程,会帮助尽快的找出shell脚本中的问题。
Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...
Linux系统中的Shell脚本调试技术,一种很好的脚本调试方法
详细的分析了shell脚本所用的各种调试办法,对于初学者和需要熟练掌握shell的人都有很大的帮助。
Linux Shell脚本系列教程(七):脚本调试.docx
shell脚本,shell调试,shell函数
脚本创建过程 给脚本传递参数 如何双击运行脚本 脚本双击闪退调试 脚本中创建脚本 shell限制命令运行时间 shell同时运行多条命令
根据《Shell脚本编程详解》第12章节-Shell脚本编程,自己写的shell脚本。大部分的已经实现,在Ubuntu18环境调试过。比较基础的shell脚本。供初学者参考。
2、适用于云存储的开发过程中,作为一个调试工具,来验证接口和参数是否正确,在shell脚本中修改调试参数,灵活方便。也可用于搭建轻量级的应用环境。 3、我的测试环境是centos7,脚本依赖的命令都是centos系统自带...
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脚本的调试基本都是echo 来处理遇到比较大的脚本的时候,就比较麻烦了,出了问题,还不是很好定位哪行代码出问题了。其实shell内置的一些变量可以很好的解决这个问题: $LINENO $FUNCNAME $BASH_LINENO ...