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,或扫描下面的二维码添加关注:

posted @ 2022-07-24 23:11  Surpassme  阅读(925)  评论(0编辑  收藏  举报