unix改變shell顯示顏色

來源:互聯網
上載者:User

編寫shell指令碼的時候,通過改變shell的顯示顏色,不但能夠改變使用shell終端的體驗,而且更為實用的是,能夠通過改變顯示內容的顏色來區分正常輸出,warning和error等不同關注層級的輸出內容。

1、逸出序列(Escape sequence)

An escape sequence is a series of characters used to change the state of computers and their attached peripheral devices. These are also known as control sequences, reflecting their use in device control. Some control sequences are special characters that always have the same meaning. Escape sequences use an escape character to change the meaning of the characters which follow it, meaning that the characters can be interpreted as a command to be executed rather than as data.

簡單地說,就是逸出序列能夠改變電腦和外設的狀態。這裡用的就是利用逸出字元來改變顯示器的顯示顏色。

2、echo命令

echo命令中有-e選項,通過這個選項,可以在該條命令中開啟對反斜線轉義的解釋,後面的選項中追加適當的逸出序列可以改變echo命令輸出的顯示顏色。echo中文字顯示顏色相關的參數主要有三個Style,Frontground和Background,每個參數有7個值具體的格式如下:

Style           Foreground      Background1st Digit       2nd Digit       3rd Digit0 - Reset       30 - Black      40 - Black1 - FG Bright   31 - Red        41 - Red2 - Unknown     32 - Green      42 - Green3 - Unknown     33 - Yellow     43 - Yellow4 - Underline   34 - Blue       44 - Blue5 - BG Bright   35 - Magenta    45 - Magenta(洋紅色)6 - Unknown     36 - Cyan       46 - Cyan(藍綠色)7 - Reverse     37 - White      47 - White

通過將命令echo -e "\e[Style;Foreground;BackgroundmTHINGSTOPRINT"中的Style、Foreground和Background換成上面的數字就可以改變後面THINGSTOPRINT的顯示顏色。比如,$ echo -e "\e[1;32;43mHello World! "的運行結果1。


圖1

註:這裡之所以Hello World!最後的歎號後面加一個空格,是因為unix shell中歎號是保留字元,用來調用曆史命令。比如!cmd就執行上一條執行過的cmd開頭的命令,而!cmd:p則是只是將上一條cmd開頭的命令喚出顯示出來,而不執行。

可以發現這樣的話,後續所有行的shell顯示顏色都會被改變,這往往不是我們想要的,所以一般來說,我們會在這種命令的末尾將這些顯示設定給Reset。同時,為了不被上一次命令影響,也會在之前設定style的值來進行開始設定之前的reset。(當然,如果要將style設定成underline或者FGorBG Bright之類的值得時候,就沒法在開始設定之前進行reset了,但是,最後的reset是無論如何都是必要的,除非你想接下來所有的顯示一直採用當前的設定。)下面幾條命令的運行結果如2。

命令:

echo -e "\e[1;32;43mHello World! \e[0m" echo -e "\e[0;32;43mHello World! \e[0m" echo -e "\e[4;32;43mHello World! \e[0m" echo -e "\e[5;32;43mHello World! \e[0m"


圖2 運行結果

3、列印所有顯示效果的指令碼

指令碼test.sh的內容:#/bin/bashfor TYLE in 0 1 2 3 4 5 6 7; do   for FG in 30 31 32 33 34 35 36 37;   do      for BG in 40 41 42 43 44 45 46 47;      do         CTRL="\033[${STYLE};${FG};${BG}m"         echo -en "${CTRL}"         echo -n "${STYLE};${FG};${BG}"         echo -en "\033[0m"      done      echo   done   echodone#Resetecho -e "\033[0m"

註:這裡改指令碼中用到了echo的-n選項,它的作用就是控制不要再輸出內容的後面追加換行,與之對應的只有一個echo的命令就是簡單地輸出一個空行,達到換行的目的。

sh test.sh運行該指令碼,就可以看到彩虹般的結果,3(結果有點長,這裡只截取了一部分)。


圖3 彩虹



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.