颜色和样式的文本
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 布局
