echo 進階:實現(xiàn)終端打印的高亮、閃爍與顏色定制
掃描二維碼
隨時隨地手機看文章
在執(zhí)行腳本的過程中,有時我們需要時刻關注腳本的打印信息,從而判斷腳本執(zhí)行是否正常,當腳本打印信息較多時,我們需要將關鍵打印更明顯的展現(xiàn)出來,此時可以使用echo加上ANSI 轉(zhuǎn)義序列達到此目的。在支持 ANSI 轉(zhuǎn)義序列的終端,可以對打印信息實現(xiàn)如下效果:文字閃爍、指定文字顏色、文字加粗、高亮顯示文字。
echo -e "running for icxiaoge project... "
echo -e "\033[5;31m running for icxiaoge project... \033[0m"

如圖所示,這條語句echo -e "\033[5;31m running for icxiaoge project... \033[0m" 的作用是在支持 ANSI 轉(zhuǎn)義序列的終端中輸出一段帶有特殊格式的文本,具體是讓文字顯示為?紅色、閃爍?的效果,內(nèi)容為 running for icxiaoge project。
echo -eecho?是輸出文本的命令;-e?選項表示“啟用轉(zhuǎn)義字符解析”,讓后續(xù)的?\033[...?這類特殊序列生效(否則會被當作普通文本輸出)。\033[5;31m是 ANSI 轉(zhuǎn)義序列(控制終端文本樣式的標準),用于設置文本格式:\033[?是轉(zhuǎn)義序列的起始標志(\033?對應 ASCII 中的“ESC 鍵”,表示開始控制命令);5?表示“閃爍模式”(讓文字閃爍);31?表示“文本顏色為紅色”(ANSI 顏色碼:30=黑、31=紅、32=綠等);m?是轉(zhuǎn)義序列的結束標志,之后的文本會應用前面的樣式。running for icxiaoge project...這是實際要輸出的內(nèi)容,會以“紅色、閃爍”的樣式顯示,通常用于強調(diào)某個正在執(zhí)行的任務(這里是提示“正在為icxiaoge?項目運行...”)。\033[0m?這是另一個 ANSI 轉(zhuǎn)義序列,0?表示“重置所有樣式”,即后續(xù)的文本會恢復為終端默認的樣式(取消閃爍和紅色)。如果沒有這個重置,后續(xù)終端輸出的所有文字都會保持紅色閃爍,這通常是不希望的。
在 ANSI 轉(zhuǎn)義序列中,存在多種文本顯示模式
常用顯示模式參數(shù)
如下是較為常用的幾個顯示模式
如圖所示:
參數(shù)7 為反顯模式,前景色與背景色互換了,突出效果明顯
參數(shù)5 為閃爍效果,則在部分終端中不支持
參數(shù)9 為刪除線,表示已經(jīng)過時的信息

echo -e "\033[1;31m running for icxiaoge project... \033[0m"
echo -e "\033[2;31m running for icxiaoge project... \033[0m"
echo -e "\033[3;31m running for icxiaoge project... \033[0m"
echo -e "\033[7;31m running for icxiaoge project... \033[0m"
echo -e "\033[9;31m running for icxiaoge project... \033[0m"
ANSI?顏色碼
ANSI 顏色碼是通過 ANSI 轉(zhuǎn)義序列控制終端文本顏色的標準編碼,主要分為 基礎 8/16 色、256 色 和 真彩色(RGB) 三大類。如下章節(jié)將簡單描述 基礎 8/16 色。
基礎 8/16 色 編碼表
通過控制碼設置 前景色(文本顏色) 和 背景色(文本底色)就能達到很好的顯示效果,更復雜的設置可以不需要。而且基礎的設置在不同的終端上更容易適配。
# 紅色文本(前景色 31)echo?-e?"\033[31m 這是紅色文本 \033[0m"# 綠色背景(背景色 42)+ 黑色文本(前景色 30)echo?-e?"\033[42;30m 綠底黑字 \033[0m"# 高亮藍色文本(94)+ 下劃線(4)echo?-e?"\033[94;4m 高亮藍色下劃線文本 \033[0m"# 重置樣式(0)必須加,否則后續(xù)文本會繼承顏色

? echo -e "\033[41;30m print message ?\033[0m"
?echo -e "\033[41;33m print message ?\033[0m"
?echo -e "\033[41;43m print message ?\033[0m"
?echo -e "\033[34;43m print message ?\033[0m"
?echo -e "\033[35;43m print message ?\033[0m"
?echo -e "\033[35;47m print message ?\033[0m"
?echo -e "\033[30;47m print message ?\033[0m"






