You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Shell脚本磁盘使用率可视化▇字符无颜色显示问题求助

解决Shell脚本中▇字符无法显示设置颜色的问题

我来帮你搞定这个问题!你写的磁盘使用率监控脚本逻辑没问题,但▇字符不显示对应颜色,大概率是颜色转义序列的应用位置不对,或者颜色变量的定义没有覆盖到进度条字符本身。

先拆解下问题根源:通常我们设置颜色变量后,需要把要变色的内容完全包裹在颜色序列和重置序列之间,而且要用echo -e来让终端解析ANSI转义码,不然颜色不会生效。另外,别忘了加颜色重置(NC变量),不然后续的文本也会跟着变色。

下面是修正后的完整脚本,直接就能用:

#!/bin/bash

# 定义ANSI颜色转义序列
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # 必须加这个,用来重置颜色,避免后续文本继承颜色

# 获取根目录磁盘使用率(提取纯数字,去掉%)
USAGE=$(df -h / | awk 'NR==2 {gsub("%","",$5); print $5}')

# 进度条总长度(可自行调整)
TOTAL_BARS=10
FILLED=$(( USAGE * TOTAL_BARS / 100 ))
EMPTY=$(( TOTAL_BARS - FILLED ))

# 根据使用率判断颜色,构建带颜色的进度条
if [ "$USAGE" -ge 85 ]; then
    # 使用率≥85%时,进度条显示红色
    PROGRESS_BAR="${RED}$(printf "%${FILLED}s" "" | tr ' ' '▇')$(printf "%${EMPTY}s" "" | tr ' ' '▇')${NC}"
else
    # 否则显示绿色
    PROGRESS_BAR="${GREEN}$(printf "%${FILLED}s" "" | tr ' ' '▇')$(printf "%${EMPTY}s" "" | tr ' ' '▇')${NC}"
fi

# 输出结果,-e参数让终端解析转义序列
echo -e "$PROGRESS_BAR ${USAGE}% Used"
echo "------------------------"

几个关键要点给你划重点:

  • echo -e:没有这个参数,终端会把\033这类转义码当成普通文本输出,颜色自然不生效。
  • 颜色包裹范围:把整个▇进度条都放在${RED}${NC}之间,确保所有进度条字符都应用颜色。
  • 颜色重置NC:必须在变色内容结束后加上,不然后面的分隔线或者其他输出也会变成红色/绿色。

如果还是有问题,排查这两个点:

  1. 终端是否支持ANSI颜色:执行echo $TERM,如果输出是xtermxterm-256color这类就没问题;如果是vt100这类可能不支持,需要调整终端的TERM变量。
  2. ▇字符是否显示正常:如果终端不支持这个Unicode字符,可以换成#或者=这类ASCII字符,效果是一样的。

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

火山引擎 最新活动