深入理解Shell輸出顏色與控制
前言
大家都知道使用ls命令列出文件列表時(shí),不同的文件類型會(huì)用不同的顏色顯示。那么如何實(shí)現(xiàn)這樣帶顏色的文本輸出呢?答案并不復(fù)雜,不管是用shell還是C語言。
一、shell下的實(shí)現(xiàn)方法
先來講在shell下,如何實(shí)現(xiàn)。用echo命令就可以實(shí)現(xiàn),參看以下例子:
echo -e "33[32mHello, world!"
當(dāng)你在終端里敲下這條命令后,是不是發(fā)現(xiàn)系統(tǒng)用綠色輸出了"Hello,world!",不止如此,連之后的命令提示符都變成了綠色?不要著急,聽我繼續(xù)說。echo
命令-e
選項(xiàng)的作用是激活終端對(duì)反斜線轉(zhuǎn)義符(即)的解釋。引號(hào)內(nèi)33用于引導(dǎo)非常規(guī)字符序列,在這里的作用就是引導(dǎo)設(shè)置輸出屬性,后邊的[32m就是將前景色設(shè)置為綠色,字母m表示設(shè)置的屬性類別,數(shù)字代表屬性值。
設(shè)置可以單獨(dú)使用,例如:
echo -e "33[0m"
這行命令的作用是恢復(fù)屬性為默認(rèn)值,也就是說0m設(shè)置項(xiàng)用于恢復(fù)默認(rèn)值?,F(xiàn)在你的終端是不是又一切正常了?
理解了這些,剩下的就簡(jiǎn)單了。用這種命令,除了設(shè)置文本前景色,還可以設(shè)置很多屬性。
下邊列出其他的設(shè)置項(xiàng):
33[0m 關(guān)閉所有屬性 33[1m 設(shè)置高亮度 33[4m 下劃線 33[5m 閃爍 33[7m 反顯 33[8m 消隱 33[30m 至 33[37m 設(shè)置前景色 33[40m 至 33[47m 設(shè)置背景色 33[nA 光標(biāo)上移n行 33[nB 光標(biāo)下移n行 33[nC 光標(biāo)右移n行 33[nD 光標(biāo)左移n行 33[y;xH設(shè)置光標(biāo)位置 33[2J 清屏 33[K 清除從光標(biāo)到行尾的內(nèi)容 33[s 保存光標(biāo)位置 33[u 恢復(fù)光標(biāo)位置 33[?25l 隱藏光標(biāo) 33[?25h 顯示光標(biāo)
各數(shù)字所代表的顏色如下:
字背景顏色范圍:40----49
40:黑
41:深紅
42:綠
43:黃色
44:藍(lán)色
45:紫色
46:深綠
47:白色
字顏色:30-----------39
30:黑
31:紅
32:綠
33:黃
34:藍(lán)色
35:紫色
36:深綠
37:白色
另外,同類的多種設(shè)置項(xiàng)可以組合在一起,中間用分號(hào)(;)隔開。
如下:
echo -e "33[20;1H33[1;4;32mHello,world33[0m"
這行命令首先33[20;1H將光標(biāo)移動(dòng)到終端第20行第1列,之后的33[1;4;32m將文本屬性設(shè)置為高亮、帶下劃線且顏色為綠色,然后輸出Hello,world;最后33[0m將終端屬性恢復(fù)為默認(rèn)值,這樣就不會(huì)看到連命令完成后的命令提示符也變了樣兒了。
通過以上各種命令的組合就可以實(shí)現(xiàn)對(duì)終端輸出地復(fù)雜控制。
二、如何在C編程中實(shí)現(xiàn)?
理解了以上在Shell中的實(shí)現(xiàn)方法,關(guān)于在C中如何實(shí)現(xiàn)就很簡(jiǎn)單了??梢哉f只需要用printf
函數(shù)代替上邊的echo -
e就OK了參見下例:
int color = 32; printf("33[20;1H33[1;4;%dmHello, world.33[0m", color);
這個(gè)例子類似上邊shell中最后那個(gè)例子,只是這里顏色值通過變量color來指定(當(dāng)然,也可以直接指定)。
三、聯(lián)想
看到這里你可能會(huì)想,是不是在其他編程語言里也可以用類似的方法實(shí)現(xiàn)對(duì)終端輸出的控制呢?答案是肯定的!比如在python中,可以如下輸出:
color=32 print “33[20;1H33[1;4;%dHello, world.33[0m"%color
這個(gè)例子的效果跟上邊C的例子是相同的。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
利用perl、python、php、shell、sed、awk、c 實(shí)現(xiàn)字符串的翻轉(zhuǎn)
今天心血來潮,看到下面的題目后延伸了一下,回顧自己以前學(xué)到的一些知識(shí)2014-04-04shell通過遍歷輸出兩個(gè)日期范圍內(nèi)所有日期的方法
這篇文章主要介紹了在shell通過遍歷輸出兩個(gè)日期范圍內(nèi)所有日期的方法,文中給出了詳細(xì)的示例代碼以及實(shí)現(xiàn)思路流程,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06shell腳本declare命令的用法詳解(聲明變量的屬性和類型)
這篇文章主要介紹了shell腳本declare命令用法(聲明變量的屬性和類型,declare?命令在一般的腳本編寫中并不常用,大多數(shù)情況下直接使用簡(jiǎn)單的變量賦值語句即可滿足需求,需要的朋友可以參考下2023-06-06Linux shell腳本編程if語句的使用方法(條件判斷)
這篇文章主要介紹了Linux shell腳本編程if語句的使用方法,大家參考使用吧2013-12-12