shell终端打印命令echo相信大家不陌生了吧
最开始学的时候老师就教我们
[root@localhost ~]# echo "Hello World"
Hello World

现在我来介绍一下另一个命令 printf
[root@localhost ~]# printf "Hello World"
Hello World[root@localhost ~]#

呵呵,是不是差不多,不同的地方就是没有自动换行!

printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会想echo自动添加换行符,我们可以手动添加 \n
[root@localhost ~]# printf "Hello World\n"
Hello World
[root@localhost ~]#

我来用一个脚本来体现printf的功能吧

  1. #!/bin/bash  
  2.  
  3. printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
  4. printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
  5. printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
  6. printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876 

输出结果为:
[root@localhost ~]# sh printf.sh
姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

怎么样 效果还不错吧(不过中文支持不太好,字符占位和字母不同!)
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。

至于怎么打好出来好看,还得慢慢根据内容调试噢!

我们再来用它做个现实的脚本!
列出1小时内占用CPU最多的10个进程
 

  1. #!/bin/bash  
  2. #列出最常用的10条历史命令  
  3.  
  4. printf "%-32s %-10s\n" 命令 次数  
  5. cat ~/.bash_history | awk '{ list [$1] ++; } \  
  6. END {  
  7. for (i in list )  
  8. {  
  9. printf ("%-30s %-10s\n",i,list [i]); }  
  10. }'| sort -nrk 2 | head 

 

怎么样,还行吧,快去试试吧!