在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当中的颜色格式非常相似。