shell echo和printf 格式化打印输出

我经常使用的就是echo 命令,不需要做特别的格式化输出这个命令就够了,如果需要做类似表单的输出格式就要用printf了

定义变量:

【这里以nginx日志为例子】
P="/logs"
file="access.log"
#赋值
zt=`echo -e "\033[36m状态码:\033[0m"`
er=`echo -e "\033[32m200\033[0m"`
sis=`echo -e "\033[33m403\033[0m"`
ss=`echo -e "\033[31m404\033[0m"`
wub=`echo -e "\033[31m500\033[0m"`
sly=`echo -e "\033[33m301\033[0m"`
sle=`echo -e "\033[33m302\033[0m"`
sals=`echo -e "\033[33m304\033[0m"`
#变量
ok=`awk '{print $9}' $P/$file |grep 200 |wc -l`
sls=`awk '{print $9}' $P/$file |grep 403 |wc -l`
slsi=`awk '{print $9}' $P/$file |grep 404 |wc -l`
wb=`awk '{print $9}' $P/$file |grep 500 |wc -l`
slyi=`awk '{print $9}' $P/$file |grep 301 |wc -l`
sler=`awk '{print $9}' $P/$file |grep 302 |wc -l`
ssi=`awk '{print $9}' $P/$file |grep 304 |wc -l`

 

使用echo:

普通的echo出来,我们可以用\t 来做分割

echo -e $zt"\t"$er"\t"$sis"\t"$ss"\t"$wub"\t"$sly"\t"$sle"\t"$sals
echo -e 数量:"\t"$ok"\t"$sls"\t"$slsi"\t"$wb"\t"$slyi"\t"$sler"\t"$ssi

效果:

shell echo和printf 格式化打印输出

 

使用printf:

printf 命令模仿 C 程序库(library)里的 printf() 程序。
标准所定义,因此使用printf的脚本比使用echo移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n。

printf 命令的语法:

printf  format-string  [arguments...]

 

参数说明:

  • format-string: 为格式控制字符串
  • arguments: 为参数列表。
【%-10s 指一个宽度为1个字符,- 表示为右对齐,不带-为右对齐】
printf "%-10s %-10s %-10s %-10s\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "%-20s %-19s %-19s %-18s %-18s %-18s %-18s %-10s\n" $zt $er $sis $ss $wub $sly $sle $sals
printf "%-10s %-10s %-10s %-10s\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printf "%-10s %-10s %-10s %-9s %-9s %-9s %-9s %-10s\n" 数量: $ok  $sls  $slsi  $wb $slyi $sler $ssi
printf "%-10s %-10s %-10s %-10s\n" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

效果:

shell echo和printf 格式化打印输出


当然看起来没有什么区别,主要分别在不同的需求方面使用区别就体现出来了

分享