? ? echo命令是Linux中最基礎(chǔ)和最常用的命令,特別是在Shell腳本經(jīng)常用來打印輸出調(diào)試信息等,功能比較豐富,現(xiàn)來總結(jié)一下,方便后續(xù)查看。
1.基本語法
echo [參數(shù)] 字符串
? ? 主要參數(shù)解釋如下所示:
| 參數(shù) | 功能 |
|---|---|
| -e | 激活轉(zhuǎn)義字符 |
| -n | 輸出不進(jìn)行換行 |
- 轉(zhuǎn)義符詳細(xì)解釋如下所示:
| 轉(zhuǎn)義符 | 含義 |
|---|---|
| \a | 發(fā)出警告聲 |
| \b | 轉(zhuǎn)義后相當(dāng)于退格鍵(Backspace),前提是\b后面存在字符 |
| \c | 不進(jìn)行換行,若后面有字符也不輸出,若沒有與echo -n等效 |
| \n | 輸出換行 |
| \f | 換行,但換行后新行的開頭位置連接著上一行的行尾 |
| \v | 與\f相同 |
| \r | 光標(biāo)移到行首,但不換行,相當(dāng)于使用\r后面的字符覆蓋\r之前同等長度的字符 |
| \t | 插入TAB符 |
| \ | 插入 \ 字符 |
? ? 使用選項(xiàng)-e參數(shù)后,除了可以輸出轉(zhuǎn)義字符,還可以輸出彩色的字符和帶有彩色背景的字符。示例如下所示:
echo -e "\033[43;31m Surpass \033[0m"
- \033[43;31m和\033[0m:專業(yè)名詞叫做ANSI控制碼,\033[表示開始輸出設(shè)定顏色的字符,\033[0m表示結(jié)束輸出設(shè)定的字符
- 43;表示輸出字符的背景顏色
- 31表示輸出字符的字體顏色
? ? ASNI控制碼不僅可以控制顏色的輸出,還有其他一些功能的控制碼,如下所示:
| ANSI控制碼 | 功能 |
|---|---|
| \033[0m | 關(guān)閉所有屬性 ,也就是說此控制碼前面的控制碼將會(huì)失效,此控制碼中的0可以省略 |
| \033[1m | 設(shè)置高亮度 |
| \033[4m | 添加下劃線 |
| \033[5m | 閃爍 |
| \033[7m | 反顯 ,撞色顯示,顯示為白底黑字,或者顯示為黑底白字 |
| \033[8m | 消隱 ,字符顏色將會(huì)與背景顏色相同 |
| \033[30m — \033[37m | 設(shè)置字符字體顏色 |
| \033[40m — \033[47m | 設(shè)置字符背景顏色 |
- 常用字符字體顏色如下所示:
| 數(shù)字 | 顏色 | 數(shù)字 | 顏色 |
|---|---|---|---|
| 30 | 黑色 | 31 | 紅色 |
| 32 | 綠色 | 33 | 黃色 |
| 34 | 藍(lán)色 | 35 | 紫色 |
| 36 | 淺藍(lán)色 | 37 | 灰色 |
- 常用字符背景顏色如下所示:
| 數(shù)字 | 顏色 | 數(shù)字 | 顏色 |
|---|---|---|---|
| 40 | 黑色 | 41 | 紅色 |
| 42 | 綠色 | 43 | 黃色 |
| 44 | 藍(lán)色 | 45 | 紫色 |
| 46 | 淺藍(lán)色 | 47 | 灰色 |
2.常用示例
- 1、-n輸出不換行
[root@Surpass ~]# echo -n "Surpass"
Surpass[root@Surpass ~]#
- 2、\b刪除前一個(gè)字符
[root@Surpass ~]# echo -e "S\burpass"
urpass
[root@Surpass ~]# echo -e "Sur\b\b\bpass"
pass
\b\b\b:表示刪除前面三個(gè)字符
- 3、\c輸出不換行,但當(dāng)\c后存在字符時(shí),其后面的字符將不會(huì)輸出,若\c后面沒有字符時(shí),功能與echo -n等效
[root@Surpass ~]# echo -e "Surpass\c"
Surpass[root@Surpass ~]# echo -e "Sur\cpass"
Sur[root@Surpass ~]#
- 4、\n表示輸出換行
[root@Surpass ~]# echo -e "I love \nSurpass"
I love
Surpass
- 5、\f,換行,但新行的行首連接前一行的行尾
[root@Surpass ~]# echo -e "I love \fSurpass"
I love
Surpass
[root@Surpass ~]# echo -e "I \flove \fSurpass"
I
love
Surpass
- 6、\r相當(dāng)于\r后面的字符覆蓋\r之前同等長度的字符
[root@Surpass ~]# echo -e "I love Surpass\rdiana"
dianae Surpass
[root@Surpass ~]# echo -e "Surpa ss\rdiana"
diana ss
- 7、\t插入TAB分隔符
[root@Surpass ~]# echo -e "Surpass\t\t\tdiana"
Surpass diana
- 8、輸出\
[root@Surpass ~]# echo -e "Surpass \\ love \\ Diana"
Surpass \ love \ Diana
-
9、輸出同時(shí)帶有字體和背景顏色的字符
01 echo-01.png
3.腳本封裝示例
? ? 根據(jù)今天的筆記,封裝一個(gè)打印輸出日志記錄腳本,如下所示:
#!/bin/bash
function printMessage(){
dt=$(date '+%F %T')
type=$([ -z "$1" ] && echo "INFO" || echo "$1" | tr [:lower:] [:upper:])
message=$([ -z "$2" ] && echo "NONE" || echo "$2")
if [ "${type}" == "INFO" ]
then
echo -e "\033[32m ${dt} ${type} ${message}\033[0m"
elif [ "${type}" == "WARNING" ]
then
echo -e "\033[33m ${dt} ${type} ${message}\033[0m"
elif [ "${type}" == "ERROR" ]
then
echo -e "\033[31m ${dt} ${type} ${message}\033[0m"
else
echo -e "\033[34m ${dt} ${type} or ${message} error \033[0m"
fi
}
function main(){
printMessage info "I love Surpass"
printMessage WARNING "I love Surpass"
printMessage errOR "I love Surpass"
printMessage Test "I love Surpass"
}
main
? ? 最終效果如下所示:

02 echo-02.png
