本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
一次性了解清楚常用的echo命令! Shell中的echo命令用于输出字符串。
参与评论可以领取掘金周边大奖,走过路过不要错过!!!
显示普通字符串
显示字符串时,可以使用双引号,或者取消双引号直接写内容。
# echo "It is a test"
It is a test
# echo It is a test
It is a test
使用双引号,表示输出的是一个内容,这个内容用双引号包含。
不使用双引号,表示依次输出echo后的每个内容
使用转义字符
echo后的内容,如果使用双引号"",则会被作为字符串的标识处理,只显示引号中的内容。
比如:
# echo It is a "test"
It is a test
想要输出引号"",可以使用转义字符\。
# echo It is a \"test\"
It is a "test"
# echo "It is a \"test\""
It is a "test"
显示变量
echo $variable输出变量
# a="a test"
# echo $a
a test
# echo "a变量的内容:$a"
a变量的内容:a test
- 在sh脚本文件中,使用echo输出变量。
read 命令从标准输入中读取一行,并把输入行指定给 shell 变量。
#!/bin/sh
read name
echo "$name It is a test"
保存以上代码为test.sh。执行,并输入内容:
# sh test.sh
我是输入 #标准输入
我是输入 It is a test #输出
echo -e处理转义字符
echo -e用于对能转义的字符进行转义。
\n转义显示换行
比如字符串中有\n,将会转义为换行。
# echo -e "OK! \n"
OK!
# echo -e "It is a\n test"
It is a
test
可能的转义字符
使用-e参数,以下字符将进行转义的特殊处理:
- \a 发出警告声;
- \b 删除前一个字符;
- \c 最后不加上换行符号;
- \f 换行但光标仍旧停留在原来的位置;
- \n 换行且光标移至行首;
- \r 光标移至行首,但不换行;
- \t 插入tab;
- \v 与\f相同;
- \nnn 插入nnn(八进制)所代表的ASCII字符;
对比下\a发出声音的不同:
# echo -e "a\adddd"
adddd
# echo -e "aadddd"
aadddd
Windows下会显示系统错误消息的提示音。
使用八进制输出ascii字符
# echo -e "\061 \062 \0101 \0141"
1 2 A a
常见八进制表示的ASCII码:
041 ! 042 " 043 # 044 $ 045 % 046 & 047 ' 050 ( 051 ) 052 * 053 + 054 , 055 - 056 . 057 / 072 : 073 ; 074 < 075 = 076 > 077 ?
输出单引号:
# echo -e '\047'
'
彩色输出
使用 echo -e 还可以实现对文字内容的颜色控制。
- 输出背景色和文字色的格式如下:
echo -e "\e[文字背景颜色;文字颜色m字符串\e[0m"
或
echo -e "\033[文字背景颜色;文字颜色m字符串\033[0m"
\e[或\033[后只有一个颜色值,表示仅设置文字颜色:
echo -e "\e[文字颜色m字符串\e[0m"
或
echo -e "\033[文字颜色m字符串\033[0m"
-
文字色的颜色码值:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
-
背景色的颜色码值:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
\e[文字背景颜色;文字颜色m中除了背景色、文字色以外,还有第三个参数,用于设置文字的属性。
\e[文字背景颜色;文字颜色;文字属性m。文字属性可能的值为:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐。
如下,新建sh脚本文件,内容为各种颜色的测试输出:
#!/bin/sh
echo "---------输出文字颜色30~37-----------"
echo -e "\e[47;30m 黑色字 \e[0m"
echo -e "\e[31m 红色字 \e[0m"
echo -e "\e[32m 绿色字 \e[0m"
echo -e "\e[33m 黄色字 \e[0m"
echo -e "\e[34m 蓝色字 \e[0m"
echo -e "\e[35m 紫色字 \e[0m"
echo -e "\e[36m 天蓝字 \e[0m"
echo -e "\e[37m 白色字 \e[0m"
echo -e "\n---------输出文字背景颜色40~47-----------"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
echo -e "\n---------输出第三个属性-----------"
echo -e "\033[40;37;1m 黑底白字加粗 \033[0m"
echo -e "\033[41;37;4m 红底白字下划线 \033[0m"
echo -e "\033[42;37;5m 绿底白字闪烁 \033[0m"
echo -e "\033[43;37;7m 黄底白字反显 \033[0m"
echo -e "\033[44;37;8m 蓝底白字消隐 \033[0m"
效果如下:
输出不以换行结束
-e "\c"
\c 转义表示结尾不是换行,从结尾处继续。
[root@VM_0_15_centos test]# echo -e "OK! \c"
OK! [root@VM_0_15_centos test]#
比如,如下脚本内容:
#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
执行结果:
# sh test1.sh
OK! It is a test
-n参数
echo -e "\c" 和 echo -n "" 的效果一样。
echo -n用于输出时不换行。
[root@VM_0_15_centos test]# echo -n "OK! "
OK! [root@VM_0_15_centos test]#
#!/bin/sh
echo -n "OK! " # -n 不换行
echo "It is a test"
将显示结果重定向到文件中
# echo "It is a test" > myfile
# echo "It is a test[append]" >> myfile
echo不进行转义,原样输出
默认情况下,echo的输出对特殊字符不进行转义。而是原样输出。
# echo "It is a\n test"
It is a\n test
但是,在有些情况下,\会作为转义符号不进行输出,比如双引号、单引号中。
# echo It is a \"test\"
It is a "test"
# echo It is a \'test\'
It is a 'test'
# echo "It is a \"test\""
It is a "test"
上面的\并没有原样输出。要想原样输出,可以采用单双引号交替的形式。
# echo 'It is a \"test\"'
It is a \"test\"
# echo "It is a \'test\'"
It is a \'test\'
echo使用反引号执行命令并输出
echo后面使用反引号 ` 可以实现命令的执行。
# echo `date`
Tue Sep 21 16:18:57 CST 2021
echo中的多行内容(输出多行内容到文件中)
echo后用引号包含的内容,可以直接使用回车换行,即引号中可以为多行内容。
这样,可以实现输出多行到文件中:
# echo "hello
> world
> I am a multiple lines content">>mulline.txt
# cat mulline.txt
hello
world
I am a multiple lines content