设为首页 收藏本站
查看: 1024|回复: 0

shell printf命令:格式化输出语句

[复制链接]

尚未签到

发表于 2018-8-22 07:17:03 | 显示全部楼层 |阅读模式
  shell printf命令:格式化输出语句
  注意:使用printf的脚本比使用echo移植性好。
  如同echo命令,printf命令可以输出简单的字符串:
  [root@master ~]#printf "Hello, Shell\n"
  Hello, Shell
  printf不像echo那样会自动提供一个换行符号。你必须显式地将换行符号指定成\n。
  printf命令的完整语法有两个部分:
  printf的语法格式:printf format-string [arguments...]
  第一部分为描述格式规格的字符串,用来描述输出的排列方式,最好为此字符串加上引号。
  此字符串包含按字面显示的字符以及格式声明,格式声明时特殊的占位符,用来描述如何显示相应的参数。
  第二部分是与格式声明相对应的参数列表,例如一系列的字符串或变量值。格式声明由两部分组成:
  百分比符号(%)和指示符。最常用的格式指示符有两个,%s用于字符串,而%d用于十进制整数。
  格式字符串中,一般字符会按字面显示。转义序列则像echo那样,解释后再输出成相应的字符。格式声明以%符号开头,并以定义的字母集中的一个来结束,用来控制相应参数的输出。例如%s用于字符串的输出:
  [root@master ~]# printf "The first program always prints'%s,%d\n'" Hello Shell
  -bash: printf: Shell: invalid number
  The first program always prints 'Hello,0
  当尝试以%d的格式来显示字符串Shell时,会发现有警告,提示Shell为无效的数字,此时会打印出默认值0;从这个试验中可以看出来:%s, %s两侧的单引号''并不是必须的。
  printf的转义序列:
  \a 警告字符,通常为ASCII的BEL字符
  \b 后退
  \c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
  \f 换页(formfeed)
  \n 换行
  \r 回车(Carriage return)
  \t 水平制表符
  \v 垂直制表符
  \  一个字面上的反斜杠字符
  \ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
  \0ddd 表示1到3位的八进制值字符
  默认情况下,转义序列只在格式字符串中会被特别对待,也就是说,如果转义序列出现在参数列表的字符串中,将不会被解释:
  [root@master ~]#printf "a string, no processing:\n" "A\nB"
  当你使用%b格式指示符时,printf会解释参数字符串里的转义序列:
  [root@master ~]#printf "a string, no processing:\n" "A\nB"
  无论时在格式字符串内还是在使用%b所打印的参数字符串里,大部分的转义序列都是被相同对待。无论如何,\c与\0ddd只有搭配%b使用才有效,而\ddd只有在格式字符串里才会被解释。
  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
  %% 字面意义的%
  根据POSIX标准:浮点格式%e、%E、%f、%g与%G是“不需要被支持”。这是因为awk支持浮点预算,且有它自己的printf语句。这样Shell程序中需要将浮点数值进行格式化的打印时,可使用小型的awk程序实现。然而,内建于bash、ksh93和zsh中的printf命令都支持浮点格式。
  数值精度的定义精度的意义:
  %d,%i,%o,%u,%x,%X 要打印的最小位数。当值的位数小于此数字时,会在前面补零。默认精度(precision)为1
  %e,%E 要打印的最小位数。当值的位数小于此数字时,会在小数点后面补零,默认精度为6.精度为0时则表示不显示小数点
  %f  小数点右边的位数
  %g,%G 有效位数(significant digit)的最大数目
  %s  要打印字符的最大数目


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554847-1-1.html 上篇帖子: [TIP]NC不使用-e选项反弹shell 下篇帖子: shell 显示百分数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表