编写shell脚本的时候,通过改变shell的显示颜色,不但能够改变使用shell终端的体验,而且更为实用的是,能够通过改变显示内容的颜色来区分正常输出,warning和error等不同关注级别的输出内容。
1、转义序列(Escape sequence)
简单地说,就是转义序列能够改变电脑和外设的状态。这里用的就是利用转义字符来改变显示器的显示颜色。
2、echo命令
echo命令中有-e选项,通过这个选项,可以在该条命令中开启对反斜杠转义的解释,后面的选项中追加适当的转义序列可以改变echo命令输出的显示颜色。echo中文字显示颜色相关的参数主要有三个Style,Frontground和Background,每个参数有7个值具体的格式如下:
Style Foreground Background 1st Digit 2nd Digit 3rd Digit 0 - Reset 30 - Black 40 - Black 1 - FG Bright 31 - Red 41 - Red 2 - Unknown 32 - Green 42 - Green 3 - Unknown 33 - Yellow 43 - Yellow 4 - Underline 34 - Blue 44 - Blue 5 - BG Bright 35 - Magenta 45 - Magenta(洋红色) 6 - Unknown 36 - Cyan 46 - Cyan(蓝绿色) 7 - Reverse 37 - White 47 - White
通过将命令echo -e "\e[Style;Foreground;BackgroundmTHINGSTOPRINT"中的Style、Foreground和Background换成上面的数字就可以改变后面THINGSTOPRINT的显示颜色。比如,$ echo -e "\e[1;32;43mHello World! "的运行结果如图1。
图1
注:这里之所以Hello World!最后的叹号后面加一个空格,是因为unix shell中叹号是保留字符,用来调用历史命令。比如!cmd就执行上一条执行过的cmd开头的命令,而!cmd:p则是只是将上一条cmd开头的命令唤出显示出来,而不执行。
可以发现这样的话,后续所有行的shell显示颜色都会被改变,这往往不是我们想要的,所以一般来说,我们会在这种命令的末尾将这些显示设置给Reset。同时,为了不被上一次命令影响,也会在之前设置style的值来进行开始设置之前的reset。(当然,如果要将style设置成underline或者FGorBG Bright之类的值得时候,就没法在开始设置之前进行reset了,但是,最后的reset是无论如何都是必要的,除非你想接下来所有的显示一直采用当前的设置。)下面几条命令的运行结果如下图2。
命令:
echo -e "\e[1;32;43mHello World! \e[0m" echo -e "\e[0;32;43mHello World! \e[0m" echo -e "\e[4;32;43mHello World! \e[0m" echo -e "\e[5;32;43mHello World! \e[0m"
3、打印所有显示效果的脚本
脚本test.sh的内容: #/bin/bash for TYLE in 0 1 2 3 4 5 6 7; do for FG in 30 31 32 33 34 35 36 37; do for BG in 40 41 42 43 44 45 46 47; do CTRL="\033[${STYLE};${FG};${BG}m" echo -en "${CTRL}" echo -n "${STYLE};${FG};${BG}" echo -en "\033[0m" done echo done echo done #Reset echo -e "\033[0m"
注:这里改脚本中用到了echo的-n选项,它的作用就是控制不要再输出内容的后面追加换行,与之对应的只有一个echo的命令就是简单地输出一个空行,达到换行的目的。
sh test.sh运行该脚本,就可以看到彩虹般的结果,如图3(结果有点长,这里只截取了一部分)。
图3 彩虹
原文地址:http://blog.csdn.net/xia7139/article/details/24653793