shell下实现echo彩色输出
需求
编写脚本有大量输出信息,希望通过彩色文字突出关键内容。
实现
网上很多方法通过echo转义字符实现彩色输出,代码如下
echo -e "\e[1;31m This is red text \e[0m"
过于晦涩,考虑更简洁的方法:调用tput命令
tput 命令会利用 terminfo 数据库中的信息,来控制和更改我们的终端,
比如控制光标、更改文本属性、控制屏幕,以及为文本涂色。
其中,为文本涂色的方法是:
- tput setab:设置背景色;
- tput setaf: 设置前景色。
其中颜色的定义如下
数值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
颜色 | 黑色 | 红色 | 绿色 | 黄色 | 蓝色 | 品红 | 青色 | 白色 |
这里给一个展示脚本:
#!/bin/bash
K=`tput setaf 0`
R=`tput setaf 1`
G=`tput setaf 2`
Y=`tput setaf 3`
B=`tput setaf 4`
M=`tput setaf 5`
C=`tput setaf 6`
W=`tput setaf 7`
# Use Q to revert color
Q=`tput sgr0`
echo "${R}red ${G}green ${B}blue ${Q}"
echo "${C}cyan ${M}magenta ${Y}yellow ${K}black ${Q}"
效果
参考
bash - How to change the output color of echo in Linux - Stack Overflow