=================================================================
1.UNIX字符界面下顯示顏色
#include <stdio.h>
int main()
{
int i, j;
for ( i=40; i<50; i++ )
{
for ( j=30; j<40; j++ )
{
printf ( "[%d;%dm%d:%d", j, i, i, j );
}
printf ( "[0m " );
}
}
/*************************************************
描述:在UNIX字符界面下顯示8種不同顏色
在printf語句中使用 /033[%d;%dm 輸出顏色
其中:
/033[%d; 表示文字顏色
%dm 表示底色
0m 確保顏色不影響下一行
**************************************************
%d用以下數字代替:
30 黑色
31 紅色
32 綠色
33 黃色
34 藍色
35 紫色
36 青色
37 白色
38 黑色
39 黑色
====================================================================================
2.Linux下帶顏色的終端輸出與簡單的閃爍功能
有時候爲了實現在終端輸出的時候字體能夠帶顏色,並且可以產生簡單的閃爍的功能,特寫了下列的代碼
實現hello world的帶顏色的輸出,並且每過一秒產生一個閃爍的功能.
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
int flag = 0;
void sig_int(int signum)
{
if (flag == 1)
fprintf(stderr, "[47;31mhello world[5m");
fprintf(stderr,"[;[0m");
fprintf(stderr,"[;[0m");
printf(" ");
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 ");
exit(1);
}
while (i++ < 10)
{
fprintf(stderr, "[;[s"); /*使用stderr是因爲其是不帶緩存的*/
fprintf(stderr, "[47;31mhello world[5m");
flag = 0;
sleep(1);
fprintf(stderr, "[;[u");
fprintf(stderr, "[;[K");
flag = 1;
sleep(1);
}
fprintf(stderr, "[47;31mhello world[5m");
fprintf(stderr,"[;[0m");
printf(" ");
return 0;
}
該程序實現輸出十次hello world然後退出. 使用一個信號是爲了還原默認的終端輸出的顏色.
另外再講講如何輸出顏色以及顏色的代碼.
格式:
[Copy to clipboard] [ - ]CODE:
printf("/033[字背景顏色;字體顏色m字符串/033[0m" );
printf("/033[47;31mhello world/033[5m");
47是字背景顏色, 31是字體的顏色, hello world是字符串. 後面的/033[5m是控制碼.
顏色代碼:
QUOTE:
字背景顏色範圍: 40--49 字顏色: 30--39
40: 黑 30: 黑
41: 紅 31: 紅
42: 綠 32: 綠
43: 黃 33: 黃
44: 藍 34: 藍
45: 紫 35: 紫
46: 深綠 36: 深綠
47: 白色 37: 白色
ANSI控制碼:
QUOTE:
/033[0m 關閉所有屬性
/033[1m 設置高亮度
/03[4m 下劃線
/033[5m 閃爍
/033[7m 反顯
/033[8m 消隱
/033[30m -- /033[37m 設置前景色
/033[40m -- /033[47m 設置背景色
/033[nA 光標上移n行
/03[nB 光標下移n行
/033[nC 光標右移n行
/033[nD 光標左移n行
/033[y;xH設置光標位置
/033[2J 清屏
/033[K 清除從光標到行尾的內容
/033[s 保存光標位置
/033[u 恢復光標位置
/033[?25l 隱藏光標
/33[?25h 顯示光標
這樣, 在某些時候就可以實現動態的輸出.
====================================================================================
3.ECHO中給字符串加顏色的命令列表
# llcolor.sh
T='RGB'
fgs_a=(' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' ' 36m' '1;36m' ' 37m' '1;37m')
echo
echo -e "01234567012345670123456701234567012345670123456701234567012345670123456701234567"
echo -e "--------------------------------------------------------------------------------"
echo "fg bg | no-bg | 40m | 41m | 42m | 43m | 44m | 45m | 46m | 47m |"
echo -e "--------+-------+-------+-------+-------+-------+-------+-------+-------+-------"
for fgs in "${fgs_a[@]}"
do
fg=${fgs// /}
echo -en " $fgs |[$fg $T[0m "
for bg in 40m 41m 42m 43m 44m 45m 46m 47m
do
echo -en " [$fg[$bg $T [0m";
done
echo
done