本文目录导读:

在Shell脚本中实现颜色输出主要使用ANSI转义序列(Escape Sequences),下面是完整的实现指南:
基础颜色代码
文字颜色(Foreground Colors)
# 定义颜色变量 BLACK='\033[0;30m' RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' WHITE='\033[0;37m' # 重置颜色 NC='\033[0m' # No Color
背景颜色(Background Colors)
BG_BLACK='\033[0;40m' BG_RED='\033[0;41m' BG_GREEN='\033[0;42m' BG_YELLOW='\033[0;43m' BG_BLUE='\033[0;44m' BG_PURPLE='\033[0;45m' BG_CYAN='\033[0;46m' BG_WHITE='\033[0;47m'
基本使用方法
#!/bin/bash
# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # 无颜色
# 使用颜色输出
echo -e "${RED}这是红色文字${NC}"
echo -e "${GREEN}这是绿色文字${NC}"
echo -e "${RED}红色${NC}和${GREEN}绿色${NC}混合"
样式控制
# 不同样式
BOLD='\033[1m' # 粗体
DIM='\033[2m' # 暗色
UNDERLINE='\033[4m' # 下划线
BLINK='\033[5m' # 闪烁
REVERSE='\033[7m' # 反色
HIDDEN='\033[8m' # 隐藏
# 示例
echo -e "${BOLD}${RED}粗体红色${NC}"
echo -e "${UNDERLINE}${GREEN}带下划线的绿色${NC}"
完整的颜色函数
#!/bin/bash
# 颜色定义
declare -A COLORS
COLORS=(
["black"]="30"
["red"]="31"
["green"]="32"
["yellow"]="33"
["blue"]="34"
["purple"]="35"
["cyan"]="36"
["white"]="37"
)
# 颜色输出函数
color_echo() {
local color=$1
local text=$2
local style=${3:-0} # 0=普通, 1=粗体, 4=下划线
if [[ -n "${COLORS[$color]}" ]]; then
echo -e "\033[${style};${COLORS[$color]}m${text}\033[0m"
else
echo "$text"
fi
}
# 使用示例
color_echo "red" "错误信息" 1 # 粗体红色
color_echo "green" "成功信息" # 普通绿色
color_echo "yellow" "警告信息" 4 # 黄色下划线
高级用法
#!/bin/bash
# 带颜色的日志函数
log_info() {
echo -e "\033[0;36m[INFO] $(date '+%Y-%m-%d %H:%M:%S') - $1\033[0m"
}
log_success() {
echo -e "\033[1;32m[SUCCESS] $(date '+%Y-%m-%d %H:%M:%S') - $1\033[0m"
}
log_warning() {
echo -e "\033[1;33m[WARNING] $(date '+%Y-%m-%d %H:%M:%S') - $1\033[0m"
}
log_error() {
echo -e "\033[1;31m[ERROR] $(date '+%Y-%m-%d %H:%M:%S') - $1\033[0m"
}
log_debug() {
echo -e "\033[0;37m[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') - $1\033[0m"
}
# 使用
log_info "系统启动中..."
log_success "操作完成"
log_warning "磁盘空间不足"
log_error "连接失败"
256色支持
#!/bin/bash
# 256色输出函数
color256() {
local color=$1
local text=$2
echo -e "\033[38;5;${color}m${text}\033[0m"
}
# 使用示例
for i in {0..255}; do
color256 $i "Color $i"
done
RGB真彩色支持
#!/bin/bash
# RGB颜色输出
rgb_echo() {
local r=$1
local g=$2
local b=$3
local text=$4
echo -e "\033[38;2;${r};${g};${b}m${text}\033[0m"
}
# 示例
rgb_echo 255 0 0 "纯红色"
rgb_echo 0 255 0 "纯绿色"
rgb_echo 0 0 255 "纯蓝色"
实用示例:进度条
#!/bin/bash
progress_bar() {
local current=$1
local total=$2
local width=50
local percent=$((current * 100 / total))
local filled=$((current * width / total))
local empty=$((width - filled))
# 颜色定义
local green='\033[0;32m'
local red='\033[0;31m'
local nc='\033[0m'
printf "\r[${green}"
printf "%${filled}s" | tr ' ' '█'
printf "${red}"
printf "%${empty}s" | tr ' ' '░'
printf "${nc}] %3d%%" $percent
}
# 使用
for i in $(seq 1 100); do
progress_bar $i 100
sleep 0.05
done
echo
注意事项
- 使用
-e参数:echo命令需要-e参数来解析转义序列 - 重置颜色:始终使用
\033[0m或${NC}重置颜色 - 兼容性:某些终端可能不支持所有颜色特性
- 变量引用:用双引号包裹变量,防止特殊字符问题
检测终端颜色支持
#!/bin/bash
# 检测是否支持颜色
if [ -t 1 ]; then
ncolors=$(tput colors)
if [ -n "$ncolors" ] && [ $ncolors -ge 8 ]; then
echo "终端支持颜色输出"
else
echo "终端不支持颜色"
fi
fi
这些方法可以让你在Shell脚本中创建美观的输出,适用于日志系统、进度显示、状态提示等场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播