echo命令使用说明
1、命令概述
echo命令用于在终端设备上输出字符串或变量提取后的值,Linux系统中最常用的几个命令之一,操作简单。使用echo命令输出一段字符串到屏幕上,起到给用户提示的作用。
2、命令语法
echo【选项】 【字符串】
3、命令选项
-n 不输出结尾的换行符
-e “\a” 发出警告音
-e “\b” 删除前面的一个字符
-e “\c” 结尾不加换行符,不换行输出,若 "\c" 后面不存在字符,作用相当于 echo -n;若 "\c" 后面存在字符,后面的字符不会输出
-e “\f” 换行,但是换行后的新行开头位置连接着上一行的行尾
-e “\n” 换行,光标移至行首
-e “\r” 表示 "\r" 后面的字符覆盖 "\r" 前面的同等长度的字符(从首字符开始覆盖)
-e "\t" 插入 tab
-e "\v" 与 "\f" 相同
-e "\\" 插入 \ 字符
-E 禁止反斜杠转移,与-e参数功能相反
4、命令示例
4.1 输出一段字符串
1 [root@localhost ~]# echo "hello world!" #输出字符串 2 hello world! 3 [root@localhost ~]# echo '"hello world!"' #输出字符串,带 "" 双引号 4 "hello world!"
4.2 输出变量提取后的值
1 [root@localhost ~]# echo $PATH 2 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 3 [root@localhost ~]# echo $PS1 4 [\u@\h \W]\$ 5 [root@localhost ~]# echo $LANG 6 zh_CN.UTF-8 7 [root@localhost ~]#
4.3 对内容进行转义,不让$符号的提取变量值功能生效:
1 [root@localhost ~]# echo \$PATH1 2 $PATH1 3 [root@localhost ~]# echo \$PS1 4 $PS1 5 [root@localhost ~]# echo \$LANG 6 $LANG 7 [root@localhost ~]#
4.4 结合输出重定向符,将字符串信息导入文件中:
1 [root@localhost ~]# echo "abcd" > a.txt #若 a.txt 不存在,直接创建;若 a.txt 存在,直接覆盖原内容。 2 3 [root@localhost ~]# echo "abcd" >> b.txt #若 b.txt 不存在,直接创建;若 b.txt 存在,追加到原内容最后。
4.5 使用 ` ` 反引号符(键盘左上角),可执行命令,并输出其结果到终端:
[root@localhost ~]# echo `date` Wed Oct 16 11:29:35 CST 2019 [root@localhost ~]# echo `ifconfig` ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 183.232.197.8 netmask 255.255.255.224 broadcast 183.232.197.31 inet6 fe80::ed01:ae56:a39:82b8 prefixlen 64 scopeid 0x20<link> ether 00:50:56:82:b1:44 txqueuelen 1000 (Ethernet) RX packets 989075 bytes 379924582 (362.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 784756 bytes 82511244 (78.6 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 96 bytes 8320 (8.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 96 bytes 8320 (8.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]#
以上可见 ifconfig 命令执行输出结果文本格式改变,不便于读写,如果想要按照 ifconfig 命令原格式输出,可加 " " 双引号:
1 [root@localhost ~]# echo "`ifconfig`" 2 ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 3 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.1 4 inet6 fe80::ed01:ae56:a39:82b8 prefixlen 64 scopeid 0x20<link> 5 ether 00:50:00:82:00:44 txqueuelen 1000 (Ethernet) 6 RX packets 989254 bytes 379937326 (362.3 MiB) 7 RX errors 0 dropped 0 overruns 0 frame 0 8 TX packets 784902 bytes 82522758 (78.6 MiB) 9 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 10 11 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 12 inet 127.0.0.1 netmask 255.0.0.0 13 inet6 ::1 prefixlen 128 scopeid 0x10<host> 14 loop txqueuelen 1 (Local Loopback) 15 RX packets 96 bytes 8320 (8.1 KiB) 16 RX errors 0 dropped 0 overruns 0 frame 0 17 TX packets 96 bytes 8320 (8.1 KiB) 18 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 19 [root@localhost ~]#
4.6 -e “\n” 换行,光标移至行首,输出带有换行符的内容:
1 [root@localhost ~]# echo -e "a\nb\nc\nd" 2 a 3 b 4 c 5 d 6 [root@localhost ~]#
4.7 -e “\b” 删除前面的一个字符,输出信息中删除 \b 前面的字符(\b 后面还有字符才能执行):
1 [root@localhost ~]# echo -e "1234567\b" #\b 后面没有字符,所以不执行 2 1234567 3 [root@localhost ~]# echo -e "123\b4567" #\b 后面有字符,删除 \b 前面的字符3 4 124567 5 [root@localhost ~]# echo -e "123456\b7" #\b 后面有字符,删除 \b 前面的字符6 6 123457 7 [root@localhost ~]#
如果要删除多个字符,可使用\b\b、\b\b\b,以此类推,注意 \b 的数量只能小于等于后面的字符数和前面的字符数:
1 [root@localhost ~]# echo -e "123456\b\b789" 2 1234789 3 [root@localhost ~]# echo -e "123456\b\b\b789" 4 123789 5 [root@localhost ~]# echo -e "123456\b\b\b\b789" #\b 的数量大于后面的字符数,命令规则改变。 6 127896 7 [root@localhost ~]# echo -e "12\b3456\b\b789" 8 134789 9 [root@localhost ~]#
4.8 -n 不输出结尾的换行符,不换行输出:
1 [root@localhost ~]# echo "hello world" 2 hello world 3 [root@localhost ~]# echo -n "hello world" 4 hello world[root@localhost ~]# #没有换行,直接输出 5 [root@localhost ~]# echo "hello world" ; echo "hello world" 6 hello world 7 hello world 8 [root@localhost ~]# echo -n "hello world" ; echo "hello world" 9 hello worldhello world #没有换行,直接输出 10 [root@localhost ~]#
4.9 -e "\t" 插入 tab键:
1 [root@localhost ~]# echo -e "01234\t56789" 2 01234 56789 #中间有个 tab键 3 [root@localhost ~]#
4.10 -c 不换行输出,若 "\c" 后面不存在字符,作用相当于 echo -n;若 "\c" 后面存在字符,后面的字符不会输出:
1 [root@localhost ~]# echo -e "123\c" 2 123[root@localhost ~]# 3 [root@localhost ~]# echo -n "123" 4 123[root@localhost ~]# 5 [root@localhost ~]# echo -e "123\c456" 6 123[root@localhost ~]# 7 [root@localhost ~]#
4.11 -e “\f” 换行,但是换行后的新行开头位置连接着上一行的行尾:
1 [root@localhost ~]# echo -e "123\f4567" 2 123 3 4567 4 [root@localhost ~]# echo -e "123\f4567\fabcd" 5 123 6 4567 7 abcd 8 [root@localhost ~]#
4.12 -e “\r” 表示 "\r" 后面的字符覆盖 "\r" 前面的同等长度的字符(从首字符开始覆盖)
1 [root@localhost ~]# echo -e "abcdefg\r123" 2 123defg 3 [root@localhost ~]# echo -e "abc\r123" 4 123 5 [root@localhost ~]# echo -e "abcdefg\r12345" 6 12345fg 7 [root@localhost ~]# echo -e "abcdefg\r123456789" 8 123456789 9 [root@localhost ~]#
4.13 -e "\\" 插入 \ 字符:
1 [root@localhost ~]# echo -e "abc\\123" 2 abc\123 3 [root@localhost ~]#
4.14 改变输出字符串的颜色,改变输出字符串的背景色:
命令格式:echo -e "\033[F;BmTEST\033[0m",以 \033[ 开始,以 \033[0m 结束,m 在颜色设置后,可以单独改变字符串颜色或者背景色,也可以都改变;字符串颜色和背景色中间用 ; 隔开,不分前后。
“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47;
F B
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
以上颜色设置都属于ANSI控制码;ANSI控制码中不仅有控制颜色的,还有一条提供其他功能的控制码
常用的ANSI控制码如下:
\033[0m 关闭所有属性,也就是此控制码前面的控制码将会失效,此控制码中的0可以互联
\033[1m 设置输出字符串高亮度显示
\033[4m 设置输出字符串有下划线
\033[5m 设置输出字符串闪烁
\033[7m 设置输出字符串返显,撞色显示,显示位白底黑字,或者黑底白字
\033[8m 设置输出字符串消隐,字符颜色将会与背景颜色相同
\033[30-37m 设置输出字符串颜色
\033[40-47m 设置输出背景颜色
\033[k 清除从光标到行尾的内容
注意:多个控制码之间用 ; 分号隔开。