shell脚本实用小工具

一、输出颜色的函数

利用 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

测试

[root@VM-0-11-centos ~]# cat /ab/c/f.log
2020-09-20 22:32:21 test.sh 20961 [error] 测试

猜你喜欢

转载自blog.csdn.net/qq_22648091/article/details/108699064