Skip to content

颜色和样式的文本 ​

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. 注意事项 ​

  1. 兼容性:
    • tput 的行为取决于终端的 TERM 环境变量(如 xterm-256color)。
    • 始终检查 tput colors 以确保颜色支持。
  2. 重置样式:
    • 使用 tput sgr0 重置样式,避免影响后续输出。
  3. 脚本可移植性:
    • 比硬编码 ANSI 转义码(如 \033[31m)更可靠。
  4. 非终端环境:
    • 如果输出被重定向到文件(如 script.sh > log.txt),tput 可能不生效。

5. 总结 ​

  • tput 是 终端控制的标准化方式,适用于:
    • 彩色输出
    • 光标定位
    • 文本样式(加粗、下划线等)
    • 查询终端属性(颜色支持、行列数等)
  • 优势:
    • 比 ANSI 转义码更可移植。
    • 自动适配不同终端类型。
  • 推荐场景:
    • 命令行工具开发
    • 交互式脚本
    • 终端 UI 布局