shell中设置文字输出的颜色及字体格式
转载:(15条消息) shell中设置文字输出的颜色及字体格式_linux 文字顏色_庚庚911的博客-CSDN博客
ANSI控制码
简介
ANSI控制码用于在字符显示系统中控制光标移动和字符色彩等,常用于BBS系统中。
ANSI ESCAPE SEQUENCES又称为VT100系列控制码,国内译为ANSI控制码。顾名思义,需要VT100系列终端的支持,当然现在已经不在局限于VT100了,包括xterm,linux都能很好完成。ANSI控制码依赖终端,不是依赖语言,所以在shell,perl,c里应用均没有问题。
ANSI控制码开始的标志都为ESC[,ESC对应ASCII码表的033(八进制),linux命令echo用-e启用转义,\033来输入ESC,\033[31m即为ESC[31m。
格式
echo:-e 用来开启echo中的转义,\e 或 \033 来输出Esc符号
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
注意m后面紧跟字符串。
ANSI控制码
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m -- \33[37m 设置前景色(字体色)30:黑 31:红 32:绿 33:黄 34:蓝色 35:紫色 36:深绿 37:白色
\33[40m -- \33[47m 设置背景色 40:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
显示字元属性控制
[n1;n2;......m
Ⅰ设定显示字元的属性状态;
Ⅱ若有两个以上的属性状态要设定则以分号将代码(n1;n2;..)隔开;
Ⅲ除非重新设定,否则原设定之属性一直被保留;
1、Linux中设置文本颜色及背景色
Shell 使用 ANSI 转义码 (ANSI escape codes) 进行颜色输出。转义序列颜色输出表如下
颜色 |
前景色(字体色) |
背景色 |
黑色 (Black) |
30 |
40 |
红色 (Red) |
31 |
41 |
绿色 (Green) |
32 |
42 |
黄色 (Yellow) |
33 |
43 |
蓝色 (Blue) |
34 |
44 |
紫红色 (Magenta) |
35 |
45 |
青色 (Cyan) |
36 |
46 |
白色 (White) |
37 |
47 |
echo -e "\033[颜色值m 文本"
这句代码中\033[ 作为转义序列的开始,你也可以使用 "\e[" 颜色值处设定前景色值。m 终止转义序列,后面紧跟着就是生效的文本。echo 需要 -e 来开启转义序列。可以用 printf 代替 echo。
printf "\e[颜色值m 文本\n"
2、shell中设置字体颜色及背景实例
例1:打印蓝色文本(两种方法)
echo -e "\033[34m Hello World" printf "\e[34m Hello World\n"
但是这样执行之后,会使得其后面的文本输出都是蓝色,连命令提示符都是蓝色。要使其返回颜色使用 \033[0m。
使用不同的转义序列组合来达到不同的效果,如下面加上背景色的显示:
echo -e "\033[前景色值;背景色值m 文本\033[0m"
前景色值和背景色值使用分号间隔,不分先后,因为两种值的颜色范围不一样,比如 黑色 30 40 。另外分开写同样生效,如 \033[44m\033[32m
3、Linux中设置字体属性(加粗、闪烁、下划线等)
转义序列还可以设置文本在显示屏上显示的方式,如是否加粗等,如下表:
ANSI 码 |
含义 |
0 |
常规文本 |
1 |
粗体文本 |
4 |
含下划线文本 |
5 |
闪烁文本 |
7 |
反色(补色)文本 |
加粗属性合并后,有些变化。如下表:
关闭加粗 |
颜色 |
开启加粗 |
颜色 |
0;30 |
黑 (Black) |
1;30 |
深灰 (Dark Gray) |
0;31 |
红 (Red) |
1;31 |
深红 (Dark Red) |
0;32 |
绿 (Green) |
1;32 |
深绿 (Dark Green) |
0;33 |
黄 (Yellow) |
1;33 |
亮黄 (Yellow) |
0;34 |
蓝 (Blue) |
1;34 |
深蓝 (Dark Blue) |
0;35 |
紫红 (Magenta) |
1;35 |
暗紫红 (Dark Magenta) |
0;36 |
青 (Cyan) |
1;36 |
深青 (Dark Cyan) |
0;37 |
浅 灰(White) |
1;37 |
白 (White) |
特效可以叠加,需要使用“;”隔开,例如:闪烁+下划线+白底色+黑字为 \033[5;4;47;30m闪烁+下划线+白底色+黑字为\033[0m
4、shell脚本实现各种字体颜色及背景设置
#!/bin/bash # #下面是字体输出颜色及终端格式控制 #字体色范围:30-37 echo -e "\033[30m 黑色字 \033[0m" echo -e "\033[31m 红色字 \033[0m" echo -e "\033[32m 绿色字 \033[0m" echo -e "\033[33m ×××字 \033[0m" echo -e "\033[34m 蓝色字 \033[0m" echo -e "\033[35m 紫色字 \033[0m" echo -e "\033[36m 天蓝字 \033[0m" echo -e "\033[37m 白色字 \033[0m" #字背景颜色范围:40-47 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" #控制选项说明 #\033[0m 关闭所有属性 #\033[1m 设置高亮度 #\033[4m 下划线 echo -e "\033[4;31m 下划线红字 \033[0m" #闪烁 echo -e "\033[5;34m 红字在闪烁 \033[0m" #反影 echo -e "\033[8m 消隐 \033[0m " #\033[30m-\033[37m 设置前景色 #\033[40m-\033[47m 设置背景色 #\033[nA光标上移n行 #\033[nB光标下移n行 echo -e "\033[4A 光标上移4行 \033[0m" #\033[nC光标右移n行 #\033[nD光标左移n行 #\033[y;xH设置光标位置 #\033[2J清屏 #\033[K清除从光标到行尾的内容 echo -e "\033[K 清除光标到行尾的内容 \033[0m" #\033[s 保存光标位置 #\033[u 恢复光标位置 #\033[?25| 隐藏光标 #\033[?25h 显示光标 echo -e "\033[?25l 隐藏光标 \033[0m" echo -e "\033[?25h 显示光标 \033[0m"
5、使用echo让字符串显示不同颜色
下面的命令可写入脚本执行,根据实际情况替换需要改变颜色的文本。
echo -e "\033[30m 黑色字 可替换部分 \033[0m" echo -e "\033[31m 红色字 可替换部分 \033[0m" echo -e "\033[32m 绿色字 可替换部分 \033[0m" echo -e "\033[33m ×××字 可替换部分 \033[0m" echo -e "\033[34m 蓝色字 可替换部分 \033[0m" echo -e "\033[35m 紫色字 可替换部分 \033[0m" echo -e "\033[36m 天蓝字 可替换部分 \033[0m" echo -e "\033[37m 白色字 可替换部分 \033[0m"
6、通过定义变量的方式给字体加颜色
#!/bin/bash #通过变量给字体加颜色 RED_COLOR='\E[1;31m' GREEN_COLOR='\E[1;32m' YELLOW_COLOR='\E[1;33m' BLUE_COLOR='\E[1;34m' PINK_COLOR='\E[1;35m' RES='\E[0m' echo -e "${RED_COLOR}=====红色可替换部分=====${RES}" echo -e "${GREEN_COLOR}=====绿色可替换部分=====${RES}" echo -e "${YELLOW_COLOR}=====×××可替换部分=====${RES}" echo -e "${BLUE_COLOR}=====蓝色可替换部分=====${RES}" echo -e "${PINK}=====粉色可替换部分=====${RES}"
7、开发一个给输出内容加颜色的函数(也可以加背景颜色)
在脚本中传2个参数,给指定内容(第一个参数),加指定颜色(第二个参数)
#!/bin/bash #通过变量给字体加颜色 #这里定义一个COLOR_1()函数,后面如果想改变字体颜色直接调用即可 COLOR_1(){ RED_COLOR='\E[1;31m' GREEN_COLOR='\E[1;32m' YELLOW_COLOR='\E[1;33m' BLUE_COLOR='\E[1;34m' PINK_COLOR='\E[1;35m' RES='\E[0m' #这里判断传入的参数是否不等于2个,如果不等于2个就提示并退出 if [ $# -ne 2 ];then echo "Usage $0 content {red|yellow|blue|green|pink}" exit fi case "$2" in red|RED) echo -e "${RED_COLOR}$1${RES}" ;; yellow|YELLOW) echo -e "${YELLOW_COLOR}$1${RES}" ;; green|GREEN) echo -e "${GREEN_COLOR}$1${RES}" ;; blue|BLUE) echo -e "${BLUE_COLOR}$1${RES}" ;; pink|PINK) echo -e "${PINK_COLOR}$1${RES}" ;; *) echo -e "请输入指定的颜色代码:{red|yellow|blue|green|pink}" esac } COLOR_1 "程序安装报错!" red COLOR_1 "程序安装成功!" green COLOR_1 "输出相关注释信息" blue
example:
echo -e "\033[1;32;46m CASE $i PASSED \033[0m"
效果如下图所示: