1. 程式人生 > 其它 >shell指令碼之printf用法

shell指令碼之printf用法

技術標籤: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