参考网址:
http://blog.sina.com.cn/s/blog_4c12aff701008284.html
http://www.360doc.com/content/12/0518/20/1016783_211970697.shtml
一.入门:
1. 概述:
有时候为了实现在终端输出的时候字体能够带颜色,并且可以产生简单的闪烁的功能,特写了下列的代码。
2. 代码:
实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.(注:具体还得判断终端类型)
(LINUX) CODE:
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
int flag = 0;
void sig_int(int signum)
{
if (flag == 1)
fprintf(stderr,"\033[47;31mhello world\033[5m");
fprintf(stderr,"\033[0m");
printf("\n");
exit(0);
}
int main()
{
int i = 0;
struct sigaction sig_act;
sig_act.sa_handler = sig_int;
sigemptyset(&sig_act.sa_mask);
sig_act.sa_flags = 0;
if (sigaction(SIGINT,&sig_act, NULL) < 0)
{
fprintf(stderr,"signal error\n");
exit(1);
}
while (i++ < 10)
{
fprintf(stderr,"\033[s"); //保存光标位置
fprintf(stderr,"\033[47;31mhello world\033[5m"); //白底红字打印helloworld,闪烁
flag= 0;
sleep(1);
fprintf(stderr,"\033[u"); //恢复光标位置
fprintf(stderr,"\033[K"); //清楚光标开始到行末
flag= 1;
sleep(1);
}
fprintf(stderr,"\033[47;31mhello world\033[5m");
fprintf(stderr,"\033[0m");
printf("\n");
return 0;
}
二.格式详解:
1. 示例
CODE:
printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
printf("\033[47;31mhello world\033[5m");
47是字背景颜色, 31是字体的颜色, hello world是字符串. 后面的\033[5m是控制码.
echo -e "\033[32;49;1m [DONE] \033[39;49;0m"
输出结果 :[DONE]
2. 颜色控制
字背景颜色范围:40--49 字颜色: 30--39
40:黑 30:黑
41:红 31:红
42:绿 32:绿
43:黄 33:黄
44:蓝 34:蓝
45:紫 35:紫
46:深绿 36:深绿
47:白色 37:白色
颜色如下:
none ="\033[0m"
black ="\033[0;30m"
dark_gray = "\033[1;30m"
blue ="\033[0;34m"
light_blue = "\033[1;34m"
green ="\033[0;32m"
light_green -= "\033[1;32m"
cyan ="\033[0;36m"
light_cyan = "\033[1;36m"
red = "\033[0;31m"
light_red = "\033[1;31m"
purple ="\033[0;35m"
light_purple = "\033[1;35m"
brown ="\033[0;33m"
yellow ="\033[1;33m"
light_gray = "\033[0;37m"
white ="\033[1;37m"
3. 输出特效控制
输出特效格式控制:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
光标位置等的格式控制:
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\033[2J 清除屏幕
\033[0q 关闭所有的键盘指示灯
\033[1q 设置“滚动锁定”指示灯 (ScrollLock)
\033[2q 设置“数值锁定”指示灯 (NumLock)
\033[3q 设置“大写锁定”指示灯 (CapsLock)
\033[15:40H 把关闭移动到第15行,40列
\007 发蜂鸣生beep
三. 其它
把知识延伸下:###########################
文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:
echo -e "\033[44;37;5m ME \033[0m COOL"
以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符 “COOL”。“e”是命令 echo 的一个可选项,它用于激活特殊字符的解析器。“\033”引导非常规字符序列。“m”意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是 “44;37;5” 和“0”。
修改“44;37;5”可以生成不同颜色的组合,数值和编码的前后顺序没有关系。可以选择的编码
#######################
RedHat的字体和背景颜色的改变方法:
命令:
PS1="[\e[32;1m\u@\h \W]\\$"
或
export PS1="[\e[32;1m\u@\h \W]\\$" 两者的区别请查看环境变量的相关资料
解释:
\e[32;1m:这就是控制字体和背景颜色的转义字符,30~37是字体颜色、40~47是背景颜色
例子中的32;1m数字的位置是可以对调的如\e[1;32m,如果是在X环境下可以更换一下1的范围0~10,可能有的没用处:0或者不写(\e [0;32m或\e[;32m)显示浅颜色,1:显示高亮 4:加下划线.....如果改后的效果不好,但是又还原不了,那就不写m前面的数字,如\e[32;m,或者直接注销再登陆
\u \h \W:这是一些转义字符,下面详细解释:
\d :代表日期,格式为weekdaymonth date,例如:"Mon Aug 1"
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
\n :新建一行
字体并不局限于一个颜色,可以有多个颜色:
PS1="[\e[32;1m\u@\e[35;1m\h \e[31;1m\W]\\$"
以上两个命令在注销后再登陆就失效了,用下面方法使其永久生效:
vi /etc/profile
在“export PATH .....”下面添加一行:export PS1="[\e[32;1m\u@\h \W]\\$"
注销再登陆,就成功了,如果没生效,使用source /etc/profile 命令试试,或者直接重启机器。