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 he"
zhang he
[root@kk ~]# echo -e "zhang he" #想要转义生效要加-e,-t即table
zhang he
[root@kk ~]# echo -e "zhang
he" #-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
#加上换行符还要用双引号进行转义
zhanghen[root@kk ~]# printf "zhanghe
" #这样才对
zhanghe
示例演示:
[root@kk ~]# cat 1.sh
printf "%-10s %-6s %-8s %-8s
" name age sex weight
printf "%-10s %-6s %-8s %-8.2f
" zhangsan 11 man 70.1234
printf "%-10s %-6s %-8s %-8.2f
" lisi 12 man 73.1
printf "%-10s %-6s %-8s %-8.2f
" 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,依次类推。最后的
表示换行。
有两个地方需要注意,我们可以看到在weight对应的选项中,第一行是以s结尾,而后面的三行都是以f结尾,什么意思呢?s表示占的是字符类型,第一行都是字符,没有数值,而f表示占的是数值类型,weight是有小数的,8.2表示一共占8个数值而且要保留两位小数。
print的颜色
print的颜色值与echo当中列出来的是一样的,就是使用上有点区别。
printf "