一、输出颜色的函数
利用 echo -e
实现输出有颜色的内容到终端
1 定义函数
#!/bin/bash
echo_color() {
declare -A col_arr
local col_arr=(
[red]="\033[31m"
[green]="\033[32m"
[yellow]="\033[33m"
[blue]="\033[34m"
[purple]="\033[37m"
)
end="\033[0m"
echo -e "${col_arr[$1]} $2 $end"
}
2 调用函数并且传递参数
# 输出红色的 hello
echo_color red hello
# 输出绿色的 hello
echo_color green hello
二、测试路径
函数用于测试传递给的一个路径是文件路径,还是目录路径;
-
假如是文件路径,则首先测试文件路径的目录是否存在,不存在则创建,之后返回这个文件路径
-
假如是目录路径,则提示需要的是一个文件的路径,之后退出
可以根据自己的用途再做进一步调整。
1 定义函数
check_file(){
# 计算参数长度
len=${#1}
# 获取到变量字符串的最后一个字符
last_char=${
1:(( $len-1 )):1}
# 通过判断最后一个字符是否为路径分隔符
# 来区分传入的路径是文件路径,还是目录路径
if [ "$last_char" == "/" ];then
echo "输入的文件路径似乎是个目录路径,需要的是一个文件路径"
exit
else
# 程序走到这里,说明是一个文件路径
# 获取到文件路径的 目录
log_dir=$(dirname $1)
ls $log_dir || mkdir -p $log_dir
echo $1
return 0
fi
}
2 调用函数
file=$(check_file /path/to/file)
echo $file
三、 记录日志的函数
1 定义函数
logger(){
local log_level=$1
local log_events=$2
local log_file=${
3:-"/var/log/${USER}-script.log"}
local dt=$(date +'%F %T')
echo -e "${dt} $0 $$ [$log_level] $log_events" \
>> $log_file
}
2 调用函数
# 设置记录日志的文件
log_file="$0-exec-xiguatian.log"
logger error 测试 $log_file
查看文件内容:
[root@VM-0-11-centos ~]# cat t.sh-exec-xiguatian.log
2020-09-20 21:31:14 t.sh 9415 [error] 测试
3 优化
可以利用上面的检查文件路径的函数,来检查传入的日志文件路径。
并且利用输出颜色的函数,来输出错误信息到屏幕
check_file(){
# 计算参数长度
local len=${#1}
# 获取到变量字符串的最后一个字符
local last_char=${
1:(( $len-1 )):1}
# 通过判断最后一个字符是否为路径分隔符
# 来区分传入的路径是文件路径,还是目录路径
if [ "$last_char" == "/" ];then
echo ""
else
# 程序走到这里,说明是一个文件路径
# 获取到文件路径的 目录
local log_dir=$(dirname $1)
ls $log_dir || mkdir -p $log_dir
echo $1
return 0
fi
}
logger(){
local log_level=$1
local log_events=$2
local log_file=${
3:-"/var/log/${USER}-script.log"}
local dt=$(date +'%F %T')
echo -e "${dt} $0 $$ [$log_level] $log_events" >> $log_file
}
使用的时候,可以把上面的代码保存到一个文件中,作为函数库使用。
比如这里保存到文件 /home/xiguatian/shark-logger
接着使用在任意需要记录日志的脚本里使用它
some.sh
#!/usr/bin/env bash
source /home/xiguatian/shark-logger
log_file=$(check_file /ab/c/f.log)
logger error "测试" $log_file
测试
扫描二维码关注公众号,回复:
11980708 查看本文章
[root@VM-0-11-centos ~]# cat /ab/c/f.log
2020-09-20 22:32:21 test.sh 20961 [error] 测试