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:必须在变色内容结束后加上,不然后面的分隔线或者其他输出也会变成红色/绿色。
如果还是有问题,排查这两个点:
- 终端是否支持ANSI颜色:执行
echo $TERM,如果输出是xterm、xterm-256color这类就没问题;如果是vt100这类可能不支持,需要调整终端的TERM变量。 - ▇字符是否显示正常:如果终端不支持这个Unicode字符,可以换成
#或者=这类ASCII字符,效果是一样的。
内容的提问来源于stack exchange,提问作者rajesh




