シェルスクリプトユーティリティガジェット

1.出力色の機能

を使用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

2.テストパス

この関数は、渡されるパスがファイルパスであるかディレクトリパスであるかをテストするために使用されます。

  • ファイルパスの場合は、最初にファイルパスのディレクトリが存在するかどうかをテストし、存在しない場合は作成してから、ファイルパスを返します。

  • ディレクトリパスの場合は、ファイルパスが必要であるというプロンプトが表示され、終了します

用途に応じてさらに調整することができます。

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