shell 脚本输出带颜色内容

本贴最后更新于 1720 天前,其中的信息可能已经时过境迁


本文摘自:https://blog.csdn.net/david_dai_1108/article/details/70478826

shell 脚本中 echo 和 printf 都可以输出内容。 我们看以下示例

echo -e "\033[43;35m david use echo say Hello World \033[0m \n"
printf "\033[44;36m david use printf say Hello World \033[0m \n"
echo -e "\033[47;30;5m david use echo say \033[0m Hello World \n"

输出如下:
image.png

它的格式是这样的:

echo -e "\033[字背景颜色;字体颜色m 字符串 \033[0m"  或者
printf "\033[字背景颜色;字体颜色m 字符串 \033[0m"  或者
echo -e "\033[字背景颜色;字体颜色m;ascii码m 字符串 \033[0m 字符串(can null) \n"

原理

这里以一个例子来说明:

echo -e "\033[47;30;5m david use echo say \033[0m Hello World \n"

作用: 42-> 背景色为白色,
30-> 字体为黑色,
5-> 字体闪烁,
0-> 关闭所有属性 输出字符 “david use echo say”,然后重新设置屏幕到缺省设置,输出字符 “Hello World”后颜色回复正常

-e 是 echo 的一个可选项,用于激活特殊字符的解析器, 也就是对反斜线转义符(即\)的解释。\033 引导非常规字符序列。意味着设置属性然后结束非常规字符序列,这里起效果的字符是 47;30;5 和 0。修改 47;30;5 可以生成不同颜色的组合,数值和编码的前后顺序没有关系。

组合命令:

echo -e "\033[20;1H\033[1;4;32m david use echo say \033[0m Hello World \n"

这行命令首先\033[20;1H 将光标移动到终端第 20 行第 1 列,之后的\033[1;4;32m 将文本属性设置为高亮、带下划线且颜色为绿色,然后输出 Hello,world;最后\033[0m 将终端属性设为缺省,这样就不会看到连命令完成后的命令提示符也变了样儿了。

我们可以通过各种命令的组合可以实现对终端输出地复杂控制。

范围

0 重新设置属性到缺省设置
1 设置粗体
2 设置一半亮度(模拟彩色显示器的颜色)
4 设置下划线(模拟彩色显示器的颜色)
5 设置闪烁
7 设置反向图象
8 消隐
22 设置一般密度
24 关闭下划线
25 关闭闪烁
27 关闭反向图象

// 字体颜范围(前景颜色):30~39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
38:在缺省的前景颜色上设置下划线
39:在缺省的前景颜色上关闭下划线

// 字背景颜色范围(背景颜色):40~49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色

nA 光标上移n行
nB 光标下移n行
nC 光标右移n行
nD 光标左移n行
y;xH设置光标位置
2J 清屏
K 清除从光标到行尾的内容
s 保存光标位置
u 恢复光标位置
?25l 隐藏光标
?25h 显示光标

一些颜色

echo -e "\033[0m none \033[0m"
echo -e "\033[30m black \033[0m"
echo -e "\033[1;30m dark_gray \033[0m"
echo -e "\033[0;34m blue \033[0m"
echo -e "\033[1;34m light_blue \033[0m"
echo -e "\033[0;32m green \033[0m"
echo -e "\033[1;32m light_green \033[0m"
echo -e "\033[0;36m cyan \033[0m"
echo -e "\033[1;36m light_cyan \033[0m"

echo -e "\033[0;31m red \033[0m"
echo -e "\033[1;31m light_red \033[0m"
echo -e "\033[0;35m purple \033[0m"
echo -e "\033[1;35m light_purple \033[0m"
echo -e "\033[0;33m brown \033[0m"
echo -e "\033[1;33m yellow \033[0m"
echo -e "\033[0;37m light_gray \033[0m"

echo -e "\033[1;37m white \033[0m"
echo -e "\033[0m none \033[0m"
echo -e "\033[0m none \033[0m"
echo -e "\033[0m none \033[0m"
echo -e "\033[0m none \033[0m"
echo -e "\033[0m none \033[0m"

echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;30m 红底黑字 \033[0m"
echo -e "\033[42;34m 绿底蓝字 \033[0m"
echo -e "\033[43;34m 黄底蓝字 \033[0m"
echo -e "\033[44;30m 蓝底黑字 \033[0m"
echo -e "\033[45;30m 紫底黑字 \033[0m"
echo -e "\033[46;30m 天蓝底黑字 \033[0m"
echo -e "\033[47;34m 白底蓝字 \033[0m"
echo -e "\033[4;31m 下划线红字 \033[0m"
echo -e "\033[5;31m 红字在闪烁 \033[0m"
echo -e "\033[8m 消隐 \033[0m "

效果图如下:
image.png

扩展

  1. 预先定义颜色变量
RED_COLOR='\E[1;31m' 
YELOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m' 
RESET='\E[0m'

#需要使用echo -e
echo -e  "${RED_COLOR}===david say red color===${RESET}"
echo -e  "${YELOW_COLOR}===david say yelow color===${RESET}"
echo -e  "${BLUE_COLOR}===david say green color===${RESET}"

效果图如下:
image.png

  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...