歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下帶顏色輸出與閃爍功能

Linux下帶顏色輸出與閃爍功能

日期:2017/2/28 16:19:48   编辑:Linux教程

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 ( " " );
}
}


/*************************************************
描述:在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<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>

int flag = 0;

void sig_int(int signum)
...{
if (flag == 1)
fprintf(stderr, "hello world");
fprintf(stderr,"[;");
fprintf(stderr,"[;");
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, "[;"); /**//*使用stderr是因為其是不帶緩存的*/
fprintf(stderr, "hello world");
flag = 0;
sleep(1);
fprintf(stderr, "[;");
fprintf(stderr, "[;");
flag = 1;
sleep(1);
}

fprintf(stderr, "hello world");
fprintf(stderr,"[;");
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中給字符串加顏色的命令列表

#!/bin/sh
# 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 "
for bg in 40m 41m 42m 43m 44m 45m 46m 47m
do
echo -en " [$fg[$bg $T ";
done
echo
done
Copyright © Linux教程網 All Rights Reserved