溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解Shell輸出顏色與控制

發(fā)布時(shí)間:2021-09-16 11:19:00 來(lái)源:億速云 閱讀:137 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了如何理解Shell輸出顏色與控制,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

大家都知道使用ls命令列出文件列表時(shí),不同的文件類型會(huì)用不同的顏色顯示。那么如何實(shí)現(xiàn)這樣帶顏色的文本輸出呢?答案并不復(fù)雜,不管是用shell還是C語(yǔ)言。

一、shell下的實(shí)現(xiàn)方法

先來(lái)講在shell下,如何實(shí)現(xiàn)。用echo命令就可以實(shí)現(xiàn),參看以下例子:

  echo -e "33[32mHello, world!"

當(dāng)你在終端里敲下這條命令后,是不是發(fā)現(xiàn)系統(tǒng)用綠色輸出了"Hello,world!",不止如此,連之后的命令提示符都變成了綠色?不要著急,聽(tīng)我繼續(xù)說(shuō)。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)值,也就是說(shuō)0m設(shè)置項(xiàng)用于恢復(fù)默認(rèn)值。現(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)(;)隔開(kāi)。

如下:

  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ì)看到連命令完成后的命令提示符也變了樣兒了。

通過(guò)以上各種命令的組合就可以實(shí)現(xiàn)對(duì)終端輸出地復(fù)雜控制。

二、如何在C編程中實(shí)現(xiàn)?

理解了以上在Shell中的實(shí)現(xiàn)方法,關(guān)于在C中如何實(shí)現(xiàn)就很簡(jiǎn)單了??梢哉f(shuō)只需要用printf函數(shù)代替上邊的echo -e就OK了參見(jiàn)下例:

  int color = 32;

  printf("33[20;1H33[1;4;%dmHello, world.33[0m", color);

這個(gè)例子類似上邊shell中最后那個(gè)例子,只是這里顏色值通過(guò)變量color來(lái)指定(當(dāng)然,也可以直接指定)。

三、聯(lián)想

看到這里你可能會(huì)想,是不是在其他編程語(yǔ)言里也可以用類似的方法實(shí)現(xiàn)對(duì)終端輸出的控制呢?答案是肯定的!比如在python中,可以如下輸出:

  color=32

  print “33[20;1H33[1;4;%dHello, world.33[0m"%color

這個(gè)例子的效果跟上邊C的例子是相同的。

上述內(nèi)容就是如何理解Shell輸出顏色與控制,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI