一、简介
shell脚本中的printf和C语言中的printf用法基本一致,只是在写法上有些许区别
二、基本用法
1.打印字符串
[root@algento-1 ~]# cat printf_test.sh
#!/bin/bash
printf "hello world"
[root@algento-1 ~]# sh printf_test.sh
hello world[root@algento-1 ~]#
这里发现printf默认是不带换行符号的,所以要换行需要带上\n
[root@algento-1 ~]# cat printf_test.sh
#!/bin/bash
printf "hello world\n"
[root@algento-1 ~]# sh printf_test.sh
hello world
2.打印内容中带有变量
多个变量参数之间用空格隔开
[root@algento-1 ~]# cat printf_test.sh
#!/bin/bash
age=10
name=zhangsan
printf "%s的年龄是:%d岁\n" $name $age
执行结果:
[root@algento-1 ~]# sh printf_test.sh
zhangsan的年龄是:10岁
变量类型 | printf对应的字符 |
---|---|
字符串 | %s |
数字 | %d |
当然在shell中没有数据类型要求没有这么严格,数字也可以用%s来接。
三、格式化输出
1.%s 显示指定宽度
语法:
printf "%字符串的显示宽度s" 变量
例子:
这是执行的默认结果
[root@algento-1 ~]# printf "#%s#\n" hello
#hello#
字符串总长度显示为6个字符,不够6个字符自动用空格补充。
hello(5个字符) + 1个空格 = 6个字符
[root@algento-1 ~]# printf "#%6s#\n" hello
# hello#
hello(5个字符) + 5个空格 = 10个字符
[root@algento-1 ~]# printf "#%10s#\n" hello
# hello#
2.%s对齐方式
我们发现在上边的例子中显示方式空格在左边,字符在右边。因为%s在显示宽度的时候默认是右对齐。因为老外的习惯就是这样。如果想要左对齐语法如下:
printf "%-宽度值s"
例子:
[root@algento-1 ~]# printf "#%-10s#\n" hello
#hello #
3.综合实例
[root@algento-1 ~]# cat printf_test.sh
#!/bin/bash
username=($(head -10 /etc/passwd |awk -F: '{print $1}'))
user_num=${#username[@]}
uid=($(head -10 /etc/passwd |awk -F: '{print $3}'))
for ((i = 0; i < $user_num; i++));do
printf "%s%d\n" ${username[$i]} ${uid[$i]}
done
执行结果:每一个用户名后边都紧跟着uid
[root@algento-1 ~]# sh printf_test.sh
root0
bin1
daemon2
adm3
lp4
sync5
shutdown6
halt7
mail8
operator11
更改此行代码:
printf "%-10s%d\n" ${username[$i]} ${uid[$i]}
对齐之后
[root@algento-1 ~]# sh printf_test.sh
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11