Linux 基礎教程 47-echo詳細講解

    echo命令是Linux中最基礎和最常用的命令,特別是在Shell腳本經常用來打印輸出調試信息等,功能比較豐富,現來總結一下,方便後續查看。

1.基本語法

echo [參數] 字符串

    主要參數解釋如下所示:

參數 功能
-e 激活轉義字符
-n 輸出不進行換行
  • 轉義符詳細解釋如下所示:
轉義符 含義
\a 發出警告聲
\b 轉義後相當於退格鍵(Backspace),前提是\b後面存在字符
\c 不進行換行,若後面有字符也不輸出,若沒有與echo -n等效
\n 輸出換行
\f 換行,但換行後新行的開頭位置連接着上一行的行尾
\v 與\f相同
\r 光標移到行首,但不換行,相當於使用\r後面的字符覆蓋\r之前同等長度的字符
\t 插入TAB符
\ 插入 \ 字符

    使用選項-e參數後,除了可以輸出轉義字符,還可以輸出彩色的字符和帶有彩色背景的字符。示例如下所示:

echo -e "\033[43;31m Surpass \033[0m"
  • \033[43;31m和\033[0m:專業名詞叫做ANSI控制碼,\033[表示開始輸出設定顏色的字符,\033[0m表示結束輸出設定的字符
  • 43;表示輸出字符的背景顏色
  • 31表示輸出字符的字體顏色

    ASNI控制碼不僅可以控制顏色的輸出,還有其他一些功能的控制碼,如下所示:

ANSI控制碼 功能
\033[0m 關閉所有屬性 ,也就是說此控制碼前面的控制碼將會失效,此控制碼中的0可以省略
\033[1m 設置高亮度
\033[4m 添加下劃線
\033[5m 閃爍
\033[7m 反顯 ,撞色顯示,顯示爲白底黑字,或者顯示爲黑底白字
\033[8m 消隱 ,字符顏色將會與背景顏色相同
\033[30m — \033[37m 設置字符字體顏色
\033[40m — \033[47m 設置字符背景顏色
  • 常用字符字體顏色如下所示:
數字 顏色 數字 顏色
30 黑色 31 紅色
32 綠色 33 黃色
34 藍色 35 紫色
36 淺藍色 37 灰色
  • 常用字符背景顏色如下所示:
數字 顏色 數字 顏色
40 黑色 41 紅色
42 綠色 43 黃色
44 藍色 45 紫色
46 淺藍色 47 灰色

2.常用示例

  • 1、-n輸出不換行
[root@Surpass ~]# echo -n "Surpass"
Surpass[root@Surpass ~]#
  • 2、\b刪除前一個字符
[root@Surpass ~]# echo -e "S\burpass"
urpass
[root@Surpass ~]# echo -e "Sur\b\b\bpass"
pass

\b\b\b:表示刪除前面三個字符

  • 3、\c輸出不換行,但當\c後存在字符時,其後面的字符將不會輸出,若\c後面沒有字符時,功能與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相當於\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、輸出同時帶有字體和背景顏色的字符

3.腳本封裝示例

    根據今天的筆記,封裝一個打印輸出日誌記錄腳本,如下所示:

#!/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

    最終效果如下所示:

原文地址:https://www.jianshu.com/p/6dbb04e56e60

本文同步在微信訂閱號上發佈,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章