颜色和样式的文本
ANSI 转义码
解释
printf
:Shell 中用于格式化输出的命令。\033[...m
:这是 ANSI 转义序列,用于控制终端的文本颜色和样式。\033
是转义字符(Esc),表示开始一个 ANSI 转义序列。[
是 ANSI 转义序列的开始标志。91
和1
是颜色和样式的代码。m
表示结束 ANSI 转义序列。
\033[91;1m
:91
:设置文本颜色为亮红色。1
:设置文本样式为粗体。- 结合使用
91;1
,表示亮红色粗体文本。
\033[0m
:0
:重置所有颜色和样式。- 用于恢复终端的默认样式。
ANSI 颜色代码
ANSI 颜色代码:
- 文本颜色:
30
:黑色31
:红色32
:绿色33
:黄色34
:蓝色35
:洋红色36
:青色37
:白色90
:亮黑色91
:亮红色92
:亮绿色93
:亮黄色94
:亮蓝色95
:亮洋红色96
:亮青色97
:亮白色
- 文本样式:
0
:重置所有样式1
:粗体2
:暗淡3
:斜体4
:下划线5
:闪烁7
:反色8
:隐藏
示例
sh
#!/bin/bash
# 输出红色粗体的警告信息
printf "\033[91;1mDEPRECATION WARNING\033[0m\n"
printf "\033[91;1mThis feature is deprecated and will be removed in a future version.\033[0m\n"
# 输出绿色粗体的提示信息
printf "\033[92;1mTIP\033[0m\n"
printf "\033[92;1mPlease use the new feature instead.\033[0m\n"
tput 命令详解
tput
是一个用于 终端控制 的 Shell 命令,它可以查询和修改终端的文本样式、颜色、光标位置等。它比直接使用 ANSI 转义码(如 \033[31m
)更可移植,适用于不同的终端类型(如 xterm
、linux
、tmux
等)。
1. 基本语法
sh
tput <capname> [args...]
capname
:终端能力名称(如colors
、bold
、setaf
等)。args
:某些能力需要额外参数(如颜色代码)。
2. 常见用途
(1) 查询终端信息
命令 | 说明 | 示例输出 |
---|---|---|
tput colors | 终端支持的颜色数量 | 8 、16 、256 |
tput lines | 终端的行数 | 24 |
tput cols | 终端的列数 | 80 |
tput longname | 终端类型的长名称 | xterm-256color |
示例:
sh
echo "当前终端支持 $(tput colors) 种颜色"
(2) 文本样式控制
命令 | 作用 | 对应 ANSI 转义码 |
---|---|---|
tput bold | 加粗文本 | \033[1m |
tput dim | 暗淡文本 | \033[2m |
tput smul | 下划线 | \033[4m |
tput rmul | 取消下划线 | \033[24m |
tput rev | 反色显示 | \033[7m |
tput sgr0 | 重置所有样式 | \033[0m |
示例:
echo "$(tput bold)加粗文本$(tput sgr0) 普通文本"
(3) 颜色控制
前景色(文字颜色)
sh
tput setaf <颜色代码> # 0-7 或 0-255(取决于终端支持)
代码 | 颜色 |
---|---|
0 | 黑色 |
1 | 红色 |
2 | 绿色 |
3 | 黄色 |
4 | 蓝色 |
5 | 紫色 |
6 | 青色 |
7 | 白色 |
示例:
echo "$(tput setaf 2)绿色文字$(tput sgr0)"
背景色sh
sh
tput setab <颜色代码> # 同上
示例:
echo "$(tput setab 4)$(tput setaf 7)蓝底白字$(tput sgr0)"
(4) 光标控制
命令 | 作用 | 示例 |
---|---|---|
tput cup <行> <列> | 移动光标到指定位置 | tput cup 5 10 |
tput civis | 隐藏光标 | tput civis |
tput cnorm | 显示光标 | tput cnorm |
tput clear | 清屏 | tput clear |
示例:
sh
tput cup 10 20
echo "光标移动到第10行第20列"
(5) 其他功能
命令 | 作用 |
---|---|
tput bel | 响铃(发出提示音) |
tput flash | 屏幕闪烁 |
tput reset | 重置终端(类似 reset 命令) |
3. 实际应用示例
(1) 彩色输出脚本
sh
#!/bin/bash
# 检测终端是否支持颜色
if [ "$(tput colors)" -ge 8 ]; then
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
BOLD=$(tput bold)
RESET=$(tput sgr0)
else
RED=""
GREEN=""
BOLD=""
RESET=""
fi
echo "${BOLD}${RED}错误:${RESET} 这是一个${GREEN}示例${RESET}"
(2) 进度条动画
sh
#!/bin/bash
echo -n "处理中 "
for i in {1..10}; do
echo -n "."
sleep 0.2
done
tput cub 10 # 回退10个字符
echo "完成!"
输出效果:
sh
处理中 ..........
完成!
(3) 终端界面布局
#!/bin/bash
clear
tput cup 2 10
echo "==== 菜单 ===="
tput cup 4 5
echo "1. 开始"
tput cup 5 5
echo "2. 退出"
tput cup 7 5
read -p "选择: " choice
效果:
复制
sh
==== 菜单 ====
1. 开始
2. 退出
选择:
4. 注意事项
- 兼容性:
tput
的行为取决于终端的TERM
环境变量(如xterm-256color
)。- 始终检查
tput colors
以确保颜色支持。
- 重置样式:
- 使用
tput sgr0
重置样式,避免影响后续输出。
- 使用
- 脚本可移植性:
- 比硬编码 ANSI 转义码(如
\033[31m
)更可靠。
- 比硬编码 ANSI 转义码(如
- 非终端环境:
- 如果输出被重定向到文件(如
script.sh > log.txt
),tput
可能不生效。
- 如果输出被重定向到文件(如
5. 总结
tput
是 终端控制的标准化方式,适用于:- 彩色输出
- 光标定位
- 文本样式(加粗、下划线等)
- 查询终端属性(颜色支持、行列数等)
- 优势:
- 比 ANSI 转义码更可移植。
- 自动适配不同终端类型。
- 推荐场景:
- 命令行工具开发
- 交互式脚本
- 终端 UI 布局