代码改变世界

[转载]linux终端输出带有颜色的字体

2011-05-28 22:40  会被淹死的鱼  阅读(1421)  评论(0编辑  收藏  举报

原文地址:http://notes.houqp.com/doku.php?id=set_terminal_font_color

Hello World

要改变输出文字的颜色其实很简单,我们先来个hello world:

echo -e "\033[0;31;40mhello world"

基本语法

根据上面的代码,我来解释一下它的语法结构。

首先,”“里面的hello world应该很好理解了,就是我们要输出的内容,关键是前面的\033[0;31;40m,这里需要遵循一定的规律。

其中\033指的是33(8进制)代表escape字符,与”[“连起来就是设置字符颜色的标志。也就是说,当xterm看到”\033[“时就知道后面接的是要打印的字符的颜色设定。所以每次设定颜色的时候都要以这个开头。当然,你也可以用16进制来表示这个开头:

echo -e "\x1b\x5b0;31;40mhello world"

或者用”\e[“:

echo -e "\e[0;31;40mhello world"

“\033[“后面接的是三个参数,都用数字给出并以”;”号分隔。他们分别代表字体属性,字体颜色与背景颜色。

以我们的hello world为例,0代表重置原来的所有属性,31是红色的代码,40则是黑色背景的代码。

关于具体每个参数有哪些可选的值,请看下面。

参数代码

以下只列举了常用的一部分代码,更完整的列表暂时还没找到。

字体属性
0 Reset All Attributes (return to normal mode)
1 Bright (usually turns on BOLD)
2 Dim
3 Underline
5 Blink
7 Reverse
8 Hidden
字体颜色
30 black
31 dark red
32 light green
33 dark yellow
34 dark blue
35 light violet
36 light blue, cyan
37 white
背景颜色
40 Black
41 Red
42 Green
43 Yellow
44 Blue
45 Magenta
46 Cyan
47 White

有一点要注意的是所有颜色配上1m参数做为背景时就会被加亮,例如31;1m代表更亮的红。但这时就无法指定背景了。

想要要各种字体的颜色,可以运行这个脚本:

color-matrix.sh
#!/bin/bash
 
#对7种颜色的加亮
for i in `seq 30 37`;do 
	echo -e "\x1b\x5b0;$i;1m $i;1m"
done
 
#7种颜色与7种背景的搭配
for j in `seq 40 47`;do
	for i in `seq 30 37`;do 
		echo -e "\x1b\x5b0;$i;"$j"m $i;"$j"m"
	done
done

更多颜色

后来发现原来可以现实更多的颜色!!! 请看这个脚本