echo&printf

echo&printf

在linux当中我们打印最常用的命令就是echo和printf,两者功能差不多,在一般的打印当中使用echo即可,但如果是打印表格的话,echo就不如printf方便了,printf是C语言风格的,echo没有什么风格,简单粗暴,下面演示一下。

1. echo

echo的简单使用

//echo简单使用,遵循引号规则
[root@kk ~]# echo zhanghe
zhanghe
[root@kk ~]# echo "zhanghe"
zhanghe
[root@kk ~]# echo 'zhanghe'
zhanghe

[root@kk ~]# echo zhanghe!
zhanghe!
[root@kk ~]# echo 'zhanghe!'
zhanghe!
[root@kk ~]# echo "zhanghe!"   #双引号会转义
-bash: !": event not found
[root@kk ~]# echo "zhanghe\!"  #加斜线将其再转回来
zhanghe\!

echo的转义字符

[root@kk ~]# echo "zhang\the"
zhang\the
[root@kk ~]# echo -e "zhang\the"  #想要转义生效要加-e,-t即table
zhang	he
[root@kk ~]# echo -e "zhang\nhe"   #-n即换行
zhang
he

echo的颜色

列几个文本常用的颜色码,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,白色37.

文本颜色 对应号码
重置 0
黑色 30
红色 31
绿色 32
黄色 33
蓝色 34
洋红 35
青色 36
白色 37

解释一下,-e不用说了,上文提到过了,需要使用转义字符的时候就要使用-e选项;\e[1;是固定的格式,不需要解释,需要注意的是冒号是中文的,而不是英文的,31m就是指红色;而最后的\e[0m指的是将颜色重新置回来。

上面提到的颜色是文本颜色,其实上还有背景颜色,背景颜色我们用的不多,下面也演示一下吧!

背景颜色 对应号码
重置 0
黑色 40
红色 41
绿色 42
黄色 43
蓝色 44
洋红 45
青色 46
白色 47

解释一下,非常简单,在上面的演示当中,字体的颜色在前面,背景色处于后面,我们实际使用过程当中很少使用背景色,太花哨了。

echo的缺点

echo的缺点是对齐,打印一行字符串不需要什么对齐,但要打印多行的话,而且多行之意每一行都要进行对齐时,echo就不好用了,就需要用到printf。

2. printf

print的简单使用

[root@kk ~]# printf zhanghe    #printf默认结尾没有换行符,需要手动添加
zhanghe[root@kk ~]# printf zhanghe\n   #加上换行符还要用双引号进行转义
zhanghen[root@kk ~]# printf "zhanghe\n"  #这样才对 
zhanghe

示例演示:

[root@kk ~]# cat 1.sh
printf "%-10s %-6s %-8s %-8s\n" name age sex weight
printf "%-10s %-6s %-8s %-8.2f\n" zhangsan 11 man 70.1234
printf "%-10s %-6s %-8s %-8.2f\n" lisi 12 man 73.1
printf "%-10s %-6s %-8s %-8.2f\n" marry 30 woman 60.342

[root@kk ~]# bash 1.sh
name       age    sex      weight  
zhangsan   11     man      70.12   
lisi       12     man      73.10   
marry      30     woman    60.34   

解释一下,这%-10s是什么意思呢?其实很简单,就是占10个字符的位置,不够就用空格填充,-表示左对齐,不加-就是右对齐,%s那都是固定格式,print后面先跟选项,然后再跟参数,选项和参数是对应关系,对多少个参数就应该有多少个选项。%-10s对应name,%-6s对应age,依次类推。最后的\n表示换行。

有两个地方需要注意,我们可以看到在weight对应的选项中,第一行是以s结尾,而后面的三行都是以f结尾,什么意思呢?s表示占的是字符类型,第一行都是字符,没有数值,而f表示占的是数值类型,weight是有小数的,8.2表示一共占8个数值而且要保留两位小数。

print的颜色

print的颜色值与echo当中列出来的是一样的,就是使用上有点区别。

printf "\033[1;32;40m%-10s\033[0m \033[1;32;40m%-6s\033[0m \033[1;32;40m%-8s\033[0m \033[1;32;40m%-8s\033[0m\n" name age sex weight
printf "%-10s %-6s %-8s %-8.2f\n" zhangsan 11 man 70.1234
printf "%-10s %-6s %-8s %-8.2f\n" lisi 12 man 73.1
printf "%-10s %-6s %-8s %-8.2f\n" marry 30 woman 60.342

解释一下,\033[1;看做是固定格式即可,\033[0就是将颜色再重置回来。也是先跟字符颜色,再跟背景颜色,与echo当中的颜色格式非常相似。

posted @ 2020-05-18 10:55  张贺贺呀  阅读(351)  评论(0编辑  收藏  举报