我们用echo搞点颜色
先看看结果,结尾有GitHub的链接。
写一个小脚本
#!/bin/bash
for ((i=0; i<=50; i ++))
do
echo "t${i}='\033[${i}m'" >> echoscript
done
for ((i=0; i<=50; i ++))
do
echo echo -e \"\$t${i} 测试用文字 '${t0}'\" >> echoscript
done
然后,打开生成的echoscript
,加shell脚本的必须代码
#!/bin/bash //加入这行
t0='\033[0m'
...... // 中间的内容,省略掉
t50='\033[50m'
echo -e "$t0 测试用文字 ${t0}"
...... // 中间的内容,省略掉
echo -e "$t50 测试用文字 ${t0}"
保存,重命名文件,echoscript
->echoscript.sh
,并给它执行的权限。
mv echoscript echoscript.sh // 改名
chmod +x echoscript.sh //执行权限
执行脚本
./echoscript.sh
这时候,就可以从屏幕上看到,输出的结果了,这里就不做截图了。
实现原理
先借一张图来说明
格式说明:
-e
选项:表示允许反斜杠(对字符)转义\033[41;36m
:称为转义序列,它本身是一个整体,中间不要有空格。\033[
:转义序列的开始。其中\033
代表Esc
符号,也可以使用\E
或\e
来代替。(在Mac系统中\E
和\e
是无效的。)41
和36
是显示效果的数值,41
表示背景是红色,36
表示文字是青色。- 补充一下,效果这部分,分为输出特效格式控制和光标位置格式控制,两类控制代码,这里只说输出特效格式控制,另外一类控制代码,自己在脚本中试一下,就可能看到效果。下面会给出代码表。
- 输出特效格式控制:又可以分出3类,特效类、文字颜色、背景颜色。也看下面的表格吧。
m
:转义序列的终止标志。\033[0m
:表示将颜色恢复成默认的配色。
好了,该上效果数值对照表了。
数值 | 效果(特效、文字颜色、背景颜色) |
---|---|
特效类 | 可以单独使用 |
0 | 重新设置属性到缺省设置 |
1 | 设置高亮 |
2 | 设置一半亮度 |
4 | 设置下划线 |
5 | 设置闪烁 |
7 | 设置反向图象 |
8 | 消隐 |
其他操作 | 需要配合使用 |
22 | 设置一般密度 |
24 | 关闭下划线 |
25 | 关闭闪烁 |
27 | 关闭反向图象 |
字体颜色 | 可以单独使用 |
30 | 设置文字黑色 |
31 | 设置文字红色 |
32 | 设置文字绿色 |
33 | 设置文字黄色 |
34 | 设置文字紫色 |
35 | 设置文字粉色 |
36 | 设置文字青色 |
37 | 设置文字白色 |
背景颜色 | 可以单独使用 |
40 | 设置黑色背景 |
41 | 设置红色背景 |
42 | 设置绿色背景 |
43 | 设置黄色背景 |
44 | 设置蓝色背景 |
45 | 设置粉色背景 |
46 | 设置青色背景 |
47 | 设置白色背景 |
那么,刚才生成的0-50的那个脚本,可以修改一下了,把无效的内容,删除一下。
好了,再试几个组合模式
#!/bin/bash
RBY='\033[31;43m'
RBY1='\033[1;31;43m'
RBY2='\033[2;31;43m'
RBY4='\033[4;31;43m'
RBY5='\033[5;31;43m'
RBY7='\033[7;31;43m'
RBY8='\033[8;31;43m'
RBY9='\033[1;4;5;31;43m'
RES='\033[0m'
echo -e "${RBY} 菜市场海报风格 ${RES}"
echo -e "${RBY1} 高亮菜市场海报风格 ${RES}"
echo -e "${RBY2} 不亮菜市场海报风格 ${RES}"
echo -e "${RBY4} 下划线菜市场海报风格 ${RES}"
echo -e "${RBY5} 闪烁菜市场海报风格 ${RES}"
echo -e "${RBY7} 反转菜市场海报风格 ${RES}"
echo -e "${RBY8} 消隐菜市场海报风格 ${RES}"
echo -e "${RBY9} 高亮+下划线+闪烁菜市场海报风格 ${RES}"
继续搞颜色
换个玩法
ECHO_SUCCESS="echo -en \\033[1;32m"
ECHO_FAILURE="echo -en \\033[1;31m"
ECHO_WARNING="echo -en \\033[1;33m"
ECHO_NORMAL="echo -en \\033[0m"
$ECHO_SUCCESS && echo SUCCESS
$ECHO_FAILURE && echo FAILURE
$ECHO_WARNING && echo WARNING
$ECHO_NORMAL && echo NORMAL
这里要注意2点:
-n
和\\
的加入,这部分可以看看echo
的一些基础讲解。- 这样连续写4行输出,看不出问题,但是,比如
SUCCESS
的下一行,接的是一个echo
的直接输出,也会是绿色的。也就是说,结尾部分,没有\033[0m
,后面的内容,就不会恢复到默认颜色。(可以看github内的echotest.sh
文件)
换个姿势,还是搞颜色
玩法还有,这次使用tput
,还是先看一下代码。
RED=$(tput setaf 1)
GREEN=$(tput setab 2)
RESET=$(tput sgr0)
echo "${RED}red text ${GREEN}green text${RESET}"
刚才的是红配黄,这次换个经典的红配绿😂
简单说明一下:
tput
这个命令还有很多的玩法,这篇就不详解了。setaf
这个参数是设置文字颜色。setab
这个参数是设置背景颜色。sgr0
这个参数是恢复默认。
来个颜色和数值的对应表
数值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
颜色 | 黑色 | 红色 | 绿色 | 黄色 | 紫色 | 洋红色 | 青色 | 白色 |
可以看出,跟上面说的\033[0m
一样,没有sgr0
,对文字效果的设置,都会保持到后面的输出内容上。
今天就到这里吧。
扩展知识,有兴趣研究的,看一下:
这里面的代码,都提交到GitHub上。需要的请自取。