每天一个linux命令:echo
1.命令功能
echo 是最常用也差不多是最简单的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串。
2.命令格式
echo [选项] [字符串]
3.命令参数
-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
4.使用场景
场景1:在标准输出上显示字符串
$ echo "welcome\nwww.zicreate.com\n"
welcome\nwww.zicreate.com\n
$ echo -e "welcome\nwww.zicreate.com"
welcome
www.zicreate.com
场景2:使用重定向符来输出到一个文件而不是标准输出
在操作 Linux 内核参数时经常需要使用 echo 改变某个参数的值,例如开启 Linux 内核的 NAT 转发功能:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
清空、替换文件内容时经常这么用:
$ echo “” > file.txt
向文件追加内容时经常这么用:
$ echo “something” >> file.txt
扩展
(1)用echo命令打印带有色彩的文字
文字色:
echo -e “\e[1;31mThis is red text\e[0m”
This is red text
\e[1;31m 将颜色设置为红色
\e[0m 将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
背景色:
echo -e “\e[1;42mGreed Background\e[0m”
Greed Background
颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
文字闪动:
echo -e “\033[37;31;5mMySQL Server Stop…\033[39;49;0m”
红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐
(2)printf
printf命令格式化并输出结果到标准输出。学过C语言的童鞋对这个命令应该非常熟悉。
命令格式
printf(选项)(参数)
格式替代符
%b 相对应的参数被视为含有要被处理的转义序列之字符串。
%c ASCII字符。显示相对应参数的第一个字符
%d, %i 十进制整数
%e, %E, %f 浮点格式
%g %e或%f转换,看哪一个较短,则删除结尾的零
%G %E或%f转换,看哪一个较短,则删除结尾的零
%o 不带正负号的八进制值
%s 字符串
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10至15
%X 不带正负号的十六进制值,使用A至F表示10至15
%% 字面意义的%
转义序列
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符
示例:
$ printf "%-5s %-10s %-4s\n" welcome to zicteate
welcome to zicteate
$ printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456
01 Tom 90.35
echo 与 printf 的区别:
(1)首先echo是回显,自带换行的;而printf只是打印出来,没有换行;
(2)echo 与 printf 使用变量的方式不一样;
例如:定义变量 w=“www.zicreate.com”
$ w=“www.zicreate.com”
$ echo $w
“www.zicreate.com”
$ printf "%s\n" $w
“www.zicreate.com”
注意:
- printf 命令默认输出结果没有换行符,需要手工添加\n。
- printf 命令后面不能接受管道符参数,如:ls | printf ‘%s’ 是错误的。
- print 命令后可以跟系统命令执行的结果, 如:printf ‘%s’ $(ls)’