简介
linux
的echo
命令, 在shell
编程中极为常用, 在终端下打印变量value
的时候也是常常用到的, 因此有必要了解下echo
的用法
功能:
echo
命令的功能是在终端窗口显示器上显示一段文字,一般起到一个提示的作用。
创建一个test.sh
脚本
在使用echo
命令前先创建一个test.sh
脚本,用于对echo
命令的输出测试。如图:
图中标注示意:
- 标注1: 在
demo
文件夹下 创建文件test.sh
- 标注2:创建的文件
- 标注3:给文件添加可执行权限
- 标注4:打开文件
- 标注5:在文件中输入要执行的命令
语 法:
echo [--help][--version]
或 echo [Options][字符串]
参数:
-
–help
显示帮助 -
–version
显示版本信息
选项:
-
-n
不要输出衍生的新行, 不加时默认换行 -
-e
启用反斜线转义解释 -
-E
禁用反斜线转义解释(默认) - 字符串可以加引号,也可以不加引号。
如果使用-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"
显示包含单引号的文本行
- 要打印单引号,需要将其括在双引号内,或使用ANSI-C引号。
echo "I'm a Linux user."
或
echo $'I\'m a Linux user.'
输出:
I'm a Linux user.
显示包含特殊字符的消息
- 使用-e选项可启用转义字符的解析。
echo -e "You know nothing, Jon Snow.\n\t- Ygritte"
输出:
You know nothing, Jon Snow.
- Ygritte
返回当前目录中所有.php文件的名称
- 说明:echo命令可以与模式匹配字符一起使用,例如通配符。
echo The PHP files are: *.php
输出:
The PHP files are: index.php contact.php functions.php
显示变量
- echo也可以显示变量。比如,我们想要显示当前登录用户的名称
echo $USER
输出:
linuxuser
说明:
$USER
是一个shell
变量。
显示命令输出
使用$(command)
表达式将命令输出作为参数传递给echo
。以下命令将显示当前日期:
echo "The date is: $(date +%D)"
输出:
The date is: 05/31/21
设置echo命令彩色输出
echo
命令可以修改字体类型,字体背景色以及字体颜色,转义序列\033
可以用于改变字体属性。要使转义序列生效,必须使用-e
选项。下面列出了部分转义代码:
-
[0m
: 正常 -
[1m
: 粗体 -
[4m
: 字体加上下划线 -
[7m
: 逆转前景和背景色 -
[8m
: 不可见字符 -
[9m
: 跨行字体 -
[30m
: 灰色字体 -
[31m
: 红色字体 -
[32m
: 绿色字体 -
[33m
: 棕色字体 -
[34m
: 蓝色字体 -
[35m
: 紫色字体 -
[36m
: 浅蓝色字体 -
[37m
: 浅灰字体 -
[38m
: 黑色字体 -
[40m
: 黑色背景 -
[41m
: 红色背景 -
[42m
: 绿色背景 -
[43m
: 棕色背景 -
[44m
: 蓝色背景 -
[45m
: 紫色背景 -
[46m
: 浅蓝色背景 -
[47m
: 浅灰色背景
例子:
echo -e "\033[31mMagic of Linux\033[0m"
结果
输出颜色结果.jpg
-
echo
是通过使用“转义序列”来为世界涂上颜色的。语法格式如下:
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
显示色彩的方法有两种:
-
在
Shell
脚本中事先定义好“颜色变量”,然后使用echo-e
来调用变量显示颜色。 -
在
Shell
脚本中事先定义好“颜色动作”,然后直接调用动作来输出变量。
我们通过两个示例来为大家展示什么是颜色变量,什么又是颜色动作。 -
第一种方法:定义颜色变量
#!/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
了。不过,需要注意其中的一些细节:
- 需要增加
-n
选项,这样引用时不会出现换行的问题。 -
\\
本质是\
,在双引号中反斜线符号一定要写成\\
- 引用变量要放到其他语句前面,并使用
&&
连接
拥抱 terminfo
目前,我们所掌握的两种“涂色”方法,都是通过转义序列来实现的。使用转义序列会有一个很不爽的地方,那就是我们要记忆“反人类的”火星文(\E[1;31m
),这无论对谁来说,都会是一个负担。
那么,有没有比较优雅的方式来实现“涂色”呢?
有的,我们可以通过 terminfo
来实现。那么,terminfo
是什么呢?
UNIX
诞生之初,计算机专家们就是利用终端来登录到 UNIX
主机的,而不同类型的终端使用着不同的命令集,这会导致终端与 UNIX
之间无法配合工作。
为了解决这个问题,计算机专家们将几乎所有类型的终端的命令集都存储到了一个数据库中,以便实现统一化、标准化的处理和响应。而这个数据库就被称为 terminfo
要想逃避火星文,我们需要terminfo
的帮忙,而 tput
便是帮我们与terminfo
建立联系
tput 让我们简单地涂色
tput
命令会利用terminfo
数据库中的信息,来控制和更改我们的终端,比如控制光标、更改文本属性、控制屏幕,以及为文本涂色。
其中,为文本涂色的方法是:
-
tput setab
:用于设置背景色; -
tput setaf
:用于设置前景色。
其中颜色的定义如表 所示。
数值 | 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
表示颜色重置。
网友评论