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