shell指令碼之printf用法
阿新 • • 發佈:2021-01-17
技術標籤:shell指令碼
一、簡介
shell指令碼中的printf和C語言中的printf用法基本一致,只是在寫法上有些許區別
二、基本用法
1.列印字串
[[email protected]-1 ~]# cat printf_test.sh
#!/bin/bash
printf "hello world"
[[email protected]-1 ~]# sh printf_test.sh
hello world[[email protected]-1 ~]#
這裡發現printf預設是不帶換行符號的,所以要換行需要帶上\n
[[email protected]-1 ~]# cat printf_test.sh
#!/bin/bash
printf "hello world\n"
[[email protected]-1 ~]# sh printf_test.sh
hello world
2.列印內容中帶有變數
多個變數引數之間用空格隔開
[[email protected]-1 ~]# cat printf_test.sh
#!/bin/bash
age=10
name=zhangsan
printf "%s的年齡是:%d歲\n" $name $age
執行結果:
[ [email protected]-1 ~]# sh printf_test.sh
zhangsan的年齡是:10歲
變數型別 | printf對應的字元 |
---|---|
字串 | %s |
數字 | %d |
當然在shell中沒有資料型別要求沒有這麼嚴格,數字也可以用%s來接。
三、格式化輸出
1.%s 顯示指定寬度
語法:
printf "%字串的顯示寬度s" 變數
例子:
這是執行的預設結果
[[email protected]-1 ~]# printf "#%s#\n" hello
#hello#
字串總長度顯示為6個字元,不夠6個字元自動用空格補充。
hello(5個字元) + 1個空格 = 6個字元
[[email protected]-1 ~]# printf "#%6s#\n" hello
# hello#
hello(5個字元) + 5個空格 = 10個字元
[[email protected]-1 ~]# printf "#%10s#\n" hello
# hello#
2.%s對齊方式
我們發現在上邊的例子中顯示方式空格在左邊,字元在右邊。因為%s在顯示寬度的時候預設是右對齊。因為老外的習慣就是這樣。如果想要左對齊語法如下:
printf "%-寬度值s"
例子:
[[email protected]-1 ~]# printf "#%-10s#\n" hello
#hello #
3.綜合例項
[[email protected] ~]# 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
[[email protected] ~]# sh printf_test.sh
root0
bin1
daemon2
adm3
lp4
sync5
shutdown6
halt7
mail8
operator11
更改此行程式碼:
printf "%-10s%d\n" ${username[$i]} ${uid[$i]}
對齊之後
[[email protected]-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