更新時間:2021-09-08 來源:黑馬程序員 瀏覽量:
echo命令是linux中最基礎的命令,在寫shell腳本的時候,會經常被用到,echo命令功能非常豐富,下面我們結合實際案例進行詳細介紹。
echo命令的基本用法,很簡單,就是echo命令后面跟上要輸出的文本,如下。
除了基本用法,還可以配合一些選項使用
echo -n 表示不換行輸出
如果不添加-n選項,文本輸出以后,指定換行了,而添加了-n選項以后,文本直接連著命令提示符輸出了,并沒有換行,這樣演示效果不明顯,我們可以同時echo兩條信息,效果比較明顯,示例如下。
當使用echo輸出命令替換后的內容時,命令執(zhí)行結果的格式可能會發(fā)生變化,比如,如果我們想要輸出ifconfig命令執(zhí)行后的結果,我們可能會使用如下命令
但是我們發(fā)現,這樣輸出的文本的格式發(fā)生了變化,這樣可能不是我們想要的,因為當我們直接執(zhí)行ifconfig命令時,ifconfig返回的結果是多行的,可是當我們使用echo輸出的時候,格式發(fā)生了變化,如果想要按照命令執(zhí)行后的原格式輸出命令替換后的結果,可以使用如下方法,如下方法在寫腳本的時候可能會用到。
我們可以使用-e選項輸出轉義字符,比如常用的轉義字符”\t”, 轉義字符”\t”表示制表符,作用相當于我們鍵盤上的tab鍵。
我們可以使用echo -e輸出轉義字符,將轉義后的內容輸出到屏幕上,示例如下
上圖示例中,已經將”\t”轉義過的制表符輸出到了屏幕上,所以,我們只要能夠記住這些轉義字符,就可以在echo命令中輸出它們,那么,我們將常用的轉義字符總結一下,然后給出示例。
常用的轉義字符如下:
\b 轉義后相當于按退格鍵(backspace) ,但前提是”\b”后面存在字符,具體效果參考下方示例。
\c 不換行輸出,在”\c”后面不存在字符的情況下,作用相當于echo -n,具體效果參考下方示例。
\n 換行,效果看示例。
\f 換行,但是換行后的新行的開頭位置連接著上一行的行尾,具體效果查看示例;
\v 與\f相同;
\t 轉以后表示插入tab,即制表符,已經在上面舉過例子;
\r 光標移至行首,但不換行,相當于使用”\r”以后的字符覆蓋”\r”之前同等長度的字符,只看這段文字描述的話可能不容易理解,具體效果查看示例;
\\ 表示插入”\”本身;
使用echo命令輸出上述轉義字符的示例如下:
使用echo命令輸出”\b”轉義字符,在”\b”后面存在字符的前提下,”\b”表示刪除前一個字符,”\b\b”表示刪除前兩個字符。
可以看到,上例中,在”\b”后面不存在任何字符時,”\b”并沒有轉義為”退格鍵”,當”\b”后面存在字符時,一個”\b”就相當于按一次backspace鍵。
我們也可以使用\c轉義符,表示不換行輸出,但是當”\c”后面仍然存在字符時,”\c”后面的字符將不會被輸出,如果”\c”后面不存在任何字符時,效果與使用”echo -n”相同,示例如下。
“\n”轉義后表示換行,下例中,被輸出的字符從”\n”處開始另起一行。
“\f”轉義符表示
換行,但是換行后的新行的開頭位置連接著上一行的行尾,如下圖示例所示,下圖中的第三個例子中有兩個”\f”。
“\v”轉義符與”\f”轉義符的作用相同。
“\r”轉義符表示使用”\r”后面的字符覆蓋”\r”之前的同等長度的字符,比較不容易理解,但是看下圖示例,就很容易明白了。
上圖中的第一個示例中,”\r”后面的123覆蓋了abc,defg沒有被覆蓋,第二個示例中,因為abc一共有3個字符,123也是有3個字符,所以123覆蓋了abc以后,只剩下了123,第三個實例中,123一共有3個字符,a只有一個字符,覆蓋以后只剩下123,第四個示例中,”\r”后面并不存在任何字符,所以”\r”前面的字符沒有被覆蓋。
“\\”經過轉義以后,表示”\”,示例如下。
使用echo命令的-e選項,除了能夠輸出轉義字符,還能夠在命令行中輸出彩色的字符,或者帶有彩色背景的字符。
我們對比著示例,再給大家詳細的解釋,示例效果如下。
可以看到,上例中輸出了紅色的大寫的”傳智教育”,這就是我們所說的,使用echo -e 輸出彩色字符的效果。
echo -e我們就不解釋了,不管是輸出轉義字符還是輸出彩色字符,都需要使用-e選項。
我們來解釋一下字符串“\033[31m傳智教育\033[0m”是什么意思。
為了方便解釋,我們盡量的縮小范圍,我們排除”傳智教育”字符串,因為這就是我們要輸出的內容,沒有什么好解釋的,排除輸出內容后,結構如下
從上圖可以看出,如果要想輸出紅色字符,至少需要兩部分,\033[31m 和 \033[0m ,這些代碼有一個專業(yè)名詞,叫做”ANSI控制碼”,但是為了方便理解,我們先用通俗的語言解釋它們,用不專業(yè)的思維去理解它們。
我們可以把\033[31m 理解成”開始輸出紅色字符”,把 \033[0m理解成”結束輸出紅色字符”。
當echo -e遇到\033[31m的時候,就認為自己要輸出紅色字符了,\033[31m就是一個信號,它告訴echo -e,需要開始輸出紅色字符了, \033[0m也是一種信號,它告訴echo 命令,紅色字符已經不能輸出了,再輸出的字符應該是黑白字符了,不能是彩色的了。
那么,如果我們想要輸出綠色字符,該怎么寫呢,示例如下
細心的你一定已經發(fā)現,輸出紅色TEST字符與輸出綠色TEST字符的唯一區(qū)別就是下圖標注的位置。
也就是說,我們只要改變對應位置的數字,就能改變輸出字符的顏色,所以,我們將能夠輸出的顏色對應的數字總結如下:
30:黑色
31:紅色
32:綠色
33:黃色
34:藍色
35:紫色
36:淺藍色
37:灰色
所以,對應上述顏色號碼,輸出效果如下:
除了能夠使用echo命令輸出彩色字符,我們還能夠為彩色字符添加彩色背景,比如,我們想要輸出具有黃色背景的紅色字符,可以使用如下方法
那么我們對比一下,輸出紅色字符的echo命令,與輸出黃色背景的紅色字符的echo命令,具體有什么不同。
可以看到,唯一不同的地方就是帶有黃色背景的命令中,多出了”43;” ,其他部分的命令都一樣。
聰明如你一定想到了,”43;”代表黃色背景,那么別的背景顏色一定會有其對應的數字編號,沒有錯,此處列出背景色編號:
40:黑色
41:紅色
42:綠色
43:黃色
44:藍色
45:紫色
46:淺藍色
47:灰色
我們可以同時設定字符的顏色與背景的顏色,怎樣搭配隨你喜歡,大家可以自己多嘗試嘗試。
我們在之前已經說過, “\033[31m” “\033[m”這些代碼都屬于 ansi 控制碼。
ansi控制碼中不僅有控制顏色的控制碼,還有一些提供其他功能的控制碼,我們來總結一下。
常用ANSI控制碼總結如下:
\033[0m 關閉所有屬性 ,也就是說此控制碼前面的控制碼將會失效,此控制碼中的0可以省略。
\033[1m 設置高亮度
\033[4m 下劃線
\033[5m 閃爍
\033[7m 反顯 ,撞色顯示,顯示為白底黑字,或者顯示為黑底白字
\033[8m 消隱 ,字符顏色將會與背景顏色相同
\033[30m — \33[37m 設置字符顏色
\033[40m — \33[47m 設置背景色
\033[K 清除從光標到行尾的內容
上述ANSI控制碼中,有的不能在bash命令行中運行,我們可以掩飾幾個可用的,常用的ANSI控制碼,示例如下圖:
上圖中,我們利用echo命令,使用-e選項,結合著ANSI控制碼,輸出了帶有下劃線的字符以及撞色顯示的字符。
猜你喜歡: