標籤:文字 article war stop error 執行 int lin exe
編寫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 彩虹
unix改變shell顯示顏色