You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在使用snmpget的Bash脚本中按阈值为电力负载值设置显示颜色

实现方案

第一步:修正颜色变量

你现有的颜色变量里的\[、\]是 Bash 提示符(PS1)专用的转义包裹符,普通脚本输出时会显示乱码,需要先修正,同时补充重置颜色的变量避免后续终端输出被持续染色:

# 加粗红色
BRed="\033[1;31m"
# 加粗黄色
BYellow="\033[1;33m"
# 重置颜色为终端默认值
Reset="\033[0m"

第二步:添加通用染色函数(适配顶部普通输出场景)

写一个复用函数处理负载数值的染色逻辑,避免重复写判断代码,同时支持小数数值比较:

# 传入负载数值,返回带对应颜色的输出字符串
colorize_load() {
    local load_val=$1
    if (( $(echo "$load_val >= 90" | bc -l) )); then
        echo -e "${BRed}${load_val}%${Reset}"
    elif (( $(echo "$load_val >= 76" | bc -l) )); then
        echo -e "${BYellow}${load_val}%${Reset}"
    else
        echo -e "${load_val}%"
    fi
}

第三步:修改顶部普通输出逻辑

把原来直接打印负载的行,替换为调用染色函数的形式,注意echo需要加-e参数才能正确解析ANSI颜色转义序列:

echo -e "Date: $DATE"
echo "========================="
echo -e "$OND1 Phases ==> L1: $(colorize_load $OND1L1) L2: $(colorize_load $OND1L2) L3: $(colorize_load $OND1L3)"
echo "---------------------------------------------------"
echo -e "$OND2 Phases ==> L1: $(colorize_load $OND2L1) L2: $(colorize_load $OND2L2) L3: $(colorize_load $OND2L3)"
echo "---------------------------------------------------"
echo -e "$OND3 Phases ==> L1: $(colorize_load $OND3L1) L2: $(colorize_load $OND3L2) L3: $(colorize_load $OND3L3)"
echo "---------------------------------------------------"

第四步:修改awk格式化输出逻辑

如果需要awk输出的部分也支持染色,将Bash侧的颜色变量传入awk,在awk内部实现染色判断即可:

if [ $BrutMode == 1 ]; then
    # BrutMode不需要百分号和颜色可保留原逻辑,需要染色参考下方else分支的写法修改即可
    echo "$DATE $OND1L1 $OND1L2 $OND1L3 $OND2L1 $OND2L2 $OND2L3 $OND3L1 $OND3L2 $OND3L3" | awk '{printf " %s  %s   %4.1f   %4.1f   %4.1f    %4.1f   %4.1f   %4.1f    %4.1f   %4.1f   %4.1f\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11}'
else
    echo "$DATE $OND1L1 $OND1L2 $OND1L3 $OND2L1 $OND2L2 $OND2L3 $OND3L1 $OND3L2 $OND3L3" | awk -v BRed="$BRed" -v BYellow="$BYellow" -v Reset="$Reset" '
    function color(v) {
        if (v >= 90) return BRed v "%" Reset
        else if (v >=76) return BYellow v "%" Reset
        else return v "%"
    }
    {printf " %s  %s   %s  %s  %s   %s  %s  %s   %s  %s  %s\n",$1,$2,color($3),color($4),color($5),color($6),color($7),color($8),color($9),color($10),color($11)}'
fi

可选优化

如果需要将脚本输出重定向到日志文件,可在脚本开头添加终端判断逻辑,只有在交互式终端运行时才启用颜色,避免日志中出现乱码转义字符:

if [ ! -t 1 ]; then
    BRed=""
    BYellow=""
    Reset=""
fi

内容的提问来源于stack exchange,提问作者Billy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:24:07