echo命令详解

2021-05-31  本文已影响0人  AnyunBo

简介

linuxecho命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法

功能:

echo命令的功能是在终端窗口显示器上显示一段文字,一般起到一个提示的作用。

创建一个test.sh脚本

在使用echo命令前先创建一个test.sh脚本,用于对echo命令的输出测试。如图:

创建脚本.png

图中标注示意:

语 法:

echo [--help][--version]echo [Options][字符串]

参数:

选项:

如果使用-e选项,则可以使用如下转义序列:

字符 意义
\a 发出警告声
\b 删除前一个字符
\c 不产生进一步输出,只输出\c之前的内容
\f 换行,但下一行内容起始位置和上一行从\f处换行的位置对齐
\n 换行,下一行内容和上一行内容对齐
\r 换行字符,光标移至行首,输出\r后面的内容
\t 插入tab水平制表符
\v 换行,但下一行内容起始位置和上一行从\v处换行的位置对齐
\\ 反斜线,插入\字符 反斜线,
\nnn 插入nnn(八进制)所代表的ASCII字符
\0NNN 八进制值表示的字节NNN(1到3个数字)
\xHH 十六进制值表示的字节NNN(1到2个数字)

结果如图:


命令结果.png

显示结果定向至文件

//echo后边用单引号包围要添加的内容
echo 'add content' >> /home/data/test.sh

注意:>>是追加

echo 'add content' > /home/data/test.sh

注意:>是删除原有内容,添加

显示包含双引号的文本行

echo 'Hello "Linuxize"'

echo "Hello \"Linuxize\""

输出:

Hello "Linuxize"

显示包含单引号的文本行

echo "I'm a Linux user."

echo $'I\'m a Linux user.'

输出:

I'm a Linux user.

显示包含特殊字符的消息

echo -e "You know nothing, Jon Snow.\n\t- Ygritte"

输出:

You know nothing, Jon Snow.
    - Ygritte

返回当前目录中所有.php文件的名称

echo The PHP files are: *.php

输出:

The PHP files are: index.php contact.php functions.php

显示变量

echo $USER

输出:

linuxuser

说明:$USER是一个shell变量。

显示命令输出

使用$(command)表达式将命令输出作为参数传递给echo。以下命令将显示当前日期:

echo "The date is: $(date +%D)"

输出:

The date is: 05/31/21

设置echo命令彩色输出

echo命令可以修改字体类型,字体背景色以及字体颜色,转义序列\033可以用于改变字体属性。要使转义序列生效,必须使用-e选项。下面列出了部分转义代码:

例子:

echo -e "\033[31mMagic of Linux\033[0m"

结果


输出颜色结果.jpg
echo -e " \033[颜色1 ;  颜色2m 要展示的文字  \033[0m "

格式详解:

  • -e选项:表示允许反斜杠(对字符)转义。
  • \033[颜色1;颜色2m:称为转义序列,它本身是一个整体,中间不要有空格。
  • \033[:转义序列的开始。其中\033代表Esc符号,也可以使用\E\e来代替。
  • 颜色1颜色2:表示字体的前景色或背景色,至于颜色1颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。
  • m:转义序列的终止标志。
  • \033[0m:表示将颜色恢复回原来的配色。

看一下上面的示例,如图 所示:


颜色显示结果.jpg

所有涉及的颜色如表所示。

色彩 绿 洋红
前景色 30 31 32 33 34 35 36 37
背景色 40 41 42 43 44 45 46 47

在脚本中显示色彩

脚本中使用 echo显示色彩的方法有两种:

#!/bin/bash
# 定义颜色变量, 还记得吧, \033、\e和\E是等价的
RED='\E[1;31m'       # 红
GREEN='\E[1;32m'    # 绿
YELOW='\E[1;33m'    # 黄
BLUE='\E[1;34m'     # 蓝
PINK='\E[1;35m'     # 粉红
RES='\E[0m'          # 清除颜色
 
# 真正使用时, 我们通过echo -e来调用
echo -e  "${RED}Red color${RES}"
echo -e  "${YELOW}Yelow color${RES}"
echo -e  "${BLUE}Blue color${RES}"
echo -e  "${GREEN}Green color${RES}"
echo -e  "${PINK}Pink color${RES}"

这种方法的原理是,把转义序列定义为变量,echo时直接引用变量就行了。

第二种方法:定义颜色动作

#!/bin/bash
# 定义颜色动作, 把echo -e也定义到变量中
SETCOLOR_SUCCESS="echo -en \\E[1;32m"
SETCOLOR_FAILURE="echo -en \\E[1;31m"
SETCOLOR_WARNING="echo -en \\E[1;33m"
SETCOLOR_NORMAL="echo -en  \\E[0;39m"
 
# 使用时直接调用颜色动作即可
$SETCOLOR_SUCCESS && echo SUCCESS   
$SETCOLOR_FAILURE && echo FAILURE   
$SETCOLOR_WARNING && echo WARNING   
$SETCOLOR_NORMAL  && echo NORMAL

第二种方法和第一种方法的思路类似,唯一不同的是我们把 echo 也加入到了定义中。这样有一个好处就是,使用时不用频繁输入 echo 了。不过,需要注意其中的一些细节:

拥抱 terminfo

目前,我们所掌握的两种“涂色”方法,都是通过转义序列来实现的。使用转义序列会有一个很不爽的地方,那就是我们要记忆“反人类的”火星文(\E[1;31m),这无论对谁来说,都会是一个负担。
那么,有没有比较优雅的方式来实现“涂色”呢?
有的,我们可以通过 terminfo 来实现。那么,terminfo 是什么呢?
UNIX诞生之初,计算机专家们就是利用终端来登录到 UNIX主机的,而不同类型的终端使用着不同的命令集,这会导致终端与 UNIX之间无法配合工作。
为了解决这个问题,计算机专家们将几乎所有类型的终端的命令集都存储到了一个数据库中,以便实现统一化、标准化的处理和响应。而这个数据库就被称为 terminfo

要想逃避火星文,我们需要terminfo 的帮忙,而 tput便是帮我们与terminfo建立联系

tput 让我们简单地涂色

tput 命令会利用terminfo数据库中的信息,来控制和更改我们的终端,比如控制光标、更改文本属性、控制屏幕,以及为文本涂色。
其中,为文本涂色的方法是:

其中颜色的定义如表 所示。

数值 0 1 2 3 4 5 6 7
颜色 黑色 红色 绿色 黄色 蓝色 洋红色 黄色 白色

通过 tput 编写涂色脚本:

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
RESET=$(tput sgr0)
echo "${RED}red text ${GREEN}green text${RESET}"

sgr0 表示颜色重置。

上一篇 下一篇

猜你喜欢

热点阅读