「大文豪贤斌学长」命令,和即将用到Shell的人们谈谈echo命令和printf( 二 )


在Linux中echo命令用来在标准输出上显示一段字符 , 比如:
echo''theechocommandtest!''
这个就会输出“theechocommandtest!”这一行文字!
echo''theechocommandtest!''>a.sh
这个就会在a.sh文件中输出“theechocommandtest!”这一行文字!该命令的一般格式为:echo[-n]字符串其中选项n表示输出文字后不换行;字符串能加引号 , 也能不加引号 。 用echo命令输出加引号的字符串时 , 将字符串原样输出;用echo命令输出不加引号的字符串时 , 将字符串中的各个单词作为字符串输出 , 各字符串之间用一个空格分割 。
Shellprintf命令
使用printf的脚本比使用echo移植性好 。 printf使用引用文本或空格分隔的参数 , 外面可以在printf中使用格式化字符串 , 还可以制定字符串的宽度、左右对齐方式等 。 默认printf不会像echo自动添加换行符 , 我们可以手动添加n 。
printf命令的语法:
printfformat-string[arguments...]
参数说明:
format-string:为格式控制字符串
arguments:为参数列表 。
实例如下:
$echo''Hello,Shell''
Hello,Shell
$printf''Hello,Shelln''
Hello,Shell
$
接下来 , 我来用一个脚本来体现printf的强大功能:
#!/bin/bash
#author:AgileTao
printf''%-10s%-8s%-4sn''姓名性别体重kg
printf''%-10s%-8s%-4.2fn''杨球男72.1234
printf''%-10s%-8s%-4.2fn''武松男38.6543
printf''%-10s%-8s%-4.2fn''欧阳克女22.9876
执行脚本 , 输出结果如下所示:
姓名性别体重kg
杨球男72.12
武松男38.65
欧阳克女22.99
%s%c%d%f都是格式替代符
%-10s指一个宽度为10个字符(-表示左对齐 , 没有则表示右对齐) , 任何字符都会被显示在10个字符宽的字符内 , 如果不足则自动以空格填充 , 超过也会将内容全部显示出来 。
%-4.2f指格式化为小数 , 其中.2指保留2位小数 。
%d%s%c%f格式替代符详解
d:Decimal十进制整数对应位置参数必须是十进制整数 , 否则报错!
s:String字符串对应位置参数必须是字符串或者字符型否则报错
c:Char字符对应位置参数必须是字符串或者字符型否则报错
f:Float浮点对应位置参数必须是数字型否则报错
实例:
#!/bin/bash
#author:AgileTao
#format-string为双引号
printf''%d%sn''1''abc''
#单引号与双引号效果一样
printf'%d%sn'1''abc''
#没有引号也可以输出
printf%sabcdef
#格式只指定了一个参数 , 但多出的参数仍然会按照该格式输出 , format-string被重用
printf%sabcdef
printf''%sn''abcdef
printf''%s%s%sn''abcdefghij
#如果没有arguments , 那么%s用NULL代替 , %d用0代替
printf''%sand%dn''
执行脚本 , 输出结果如下所示:
1abc
1abc
abcdefabcdefabc
def
abc
def
ghi
j
and0
printf的转义序列
序列说明
a警告字符 , 通常为ASCII的BEL字符
b后退
c抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效) , 而且 , 任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符 , 都被忽略
f换页(formfeed)
n换行
r回车(Carriagereturn)
t水平制表符
v垂直制表符
一个字面上的反斜杠字符
ddd表示1到3位数八进制值的字符 。 仅在格式字符串中有效
0ddd表示1到3位的八进制值字符
实例
$printf''astring,noprocessing:<%s>n''''XnY''
astring,noprocessing:<XnY>


推荐阅读