07 linux 一个完整的shell脚本调试工具
Posted EngineerForSoul
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07 linux 一个完整的shell脚本调试工具相关的知识,希望对你有一定的参考价值。
一个完整的shell脚本调试工具
执行shell脚本时,常常会打印一些日志到控制台,根据输出的日志,来判断脚本功能正确与否。
常用的日志输出形式
通过Vim编辑需要调试的脚本,在脚本很多行使用echo输出不同的内容来作为调试的依据
[userwin@MiWiFi-R3L-srv temp]$ echo "This is a test log"
This is a test log
通常小篇幅的shell 脚本,使用echo的形式来调试,木的问题。
但是如果shell脚本有上千行,且逻辑复杂的情况下,这种就很难满足要求。
使用OOP编程思想设计log函数
[userwin@MiWiFi-R3L-srv temp]$ vim log.sh
#!/bin/bash
function log()
echo "$@"
[userwin@MiWiFi-R3L-srv temp]$ vim debug.sh
#!/bin/bash
source ./log.sh
log "test log funciton"
log "today is `date '+%Y-%m-%d'` "
[userwin@MiWiFi-R3L-srv temp]$ sh debug.sh
test log funciton
today is 2021-11-26
让log方法象log4j一样 输出时前面带日期和时间
[userwin@MiWiFi-R3L-srv temp]$ vim log.sh
#!/bin/bash
function log()
echo "$(date '+%Y-%m-%d %H:%M:%S') $@"
[userwin@MiWiFi-R3L-srv temp]$ sh debug.sh
2021-11-26 00:04:53 test log funciton
2021-11-26 00:04:53 today is 2021-11-26
为日志输出添加开关
LOG_OPEN=1 即为Log日志的开关。
[userwin@MiWiFi-R3L-srv temp]$ cat log.sh
#!/bin/bash
LOG_OPEN=1
function log()
[ $LOG_OPEN -eq 1 ] && echo "$(date '+%Y-%m-%d %H:%M:%S') $@"
划分日志等级 并添加颜色
[userwin@MiWiFi-R3L-srv temp]$ vim log.sh
#!/bin/bash
#日志级别 debug-1, info-2, warn-3, error-4, always-5
LOG_LEVEL=3
#调试日志
function log_debug()
content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 1 ] && echo -e "\\033[32m" $content "\\033[0m"
#信息日志
function log_info()
content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 2 ] && echo -e "\\033[32m" $content "\\033[0m"
#警告日志
function log_warn()
content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 3 ] && echo -e "\\033[33m" $content "\\033[0m"
#错误日志
function log_err()
content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 4 ] && echo -e "\\033[31m" $content "\\033[0m"
#一直都会打印的日志
function log_always()
content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 5 ] && echo -e "\\033[32m" $content "\\033[0m"
调用
[userwin@MiWiFi-R3L-srv temp]$ vim test.sh
#!/bin/bash
source ./log.sh
log_debug "this is debug log..."
log_info "this is info log..."
log_warn "this is warn log..."
log_err "this is error log..."
log_always "this is always log.."
输出结果
[userwin@MiWiFi-R3L-srv temp]$ sh test.sh
[WARN] 2021-11-28 23:05:23 this is warn log...
[ERROR] 2021-11-28 23:05:23 this is error log...
[ALWAYS] 2021-11-28 23:05:23 this is always log..
输出到文件
vim logFile.sh
#!/bin/bash
#日志级别 debug-1, info-2, warn-3, error-4, always-5
LOG_LEVEL=3
#日志文件
LOG_FILE=./log.txt
#调试日志
function log_debug()
content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 1 ] && echo $content >> $LOG_FILE && echo -e "\\033[32m" $content "\\033[0m"
#信息日志
function log_info()
content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 2 ] && echo $content >> $LOG_FILE && echo -e "\\033[32m" $content "\\033[0m"
#警告日志
function log_warn()
content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 3 ] && echo $content >> $LOG_FILE && echo -e "\\033[33m" $content "\\033[0m"
#错误日志
function log_err()
content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 4 ] && echo $content >> $LOG_FILE && echo -e "\\033[31m" $content "\\033[0m"
#一直都会打印的日志
function log_always()
content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@"
[ $LOG_LEVEL -le 5 ] && echo $content >> $LOG_FILE && echo -e "\\033[32m" $content "\\033[0m"
调用
[userwin@MiWiFi-R3L-srv temp]$ vim test.sh
#!/bin/bash
source ./logFile.sh
log_debug "this is debug log..."
log_info "this is info log..."
log_warn "this is warn log..."
log_err "this is error log..."
log_always "this is always log.."
输出结果:
[userwin@MiWiFi-R3L-srv temp]$ cat log.txt
[WARN] 2021-11-28 23:09:00 this is warn log...
[ERROR] 2021-11-28 23:09:00 this is error log...
[ALWAYS] 2021-11-28 23:09:00 this is always log..
为什么输出没有颜色? 见下图
修改输出信息如下就有颜色处处了
输出记过
总结
脚本还有待完善,目前有如下几个想法
1:创建log.cfg配置文件,放如下配置
#日志级别 debug-1, info-2, warn-3, error-4, always-5
LOG_LEVEL=3
#日志文件
LOG_FILE=./log.txt
修改 logFile.sh 如果读取log.cfg 有值,则取其值;无值,给个默认值。
2:将这两个配置写在调用shell 脚本中,并将这个量变量导入环境变量中,如果logFile.sh 没有取到系统变量,就给个默认值。
如此,脚本就编程谁调用,谁给日志配置日志等级和日志输出路径。
3: logFile.sh 中的方法有待优化。
以上三个想法留着后面补充吧!!!
以上是关于07 linux 一个完整的shell脚本调试工具的主要内容,如果未能解决你的问题,请参考以下文章