shell指令碼之printf用法

2021-10-16 03:14:33 字數 2434 閱讀 3723

shell指令碼中的printf和c語言中的printf用法基本一致,只是在寫法上有些許區別

[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

多個變數引數之間用空格隔開

[root@algento-1~

]# cat printf_test.sh

#!/bin/bash

age=

10name=zhangsan

printf "%s的年齡是:%d歲\n" $name $age

執行結果:

[root@algento-1~

]# sh printf_test.sh

zhangsan的年齡是:

10歲

變數型別

printf對應的字元

字串%s

數字%d

當然在shell中沒有資料型別要求沒有這麼嚴格,數字也可以用%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#

我們發現在上邊的例子中顯示方式空格在左邊,字元在右邊。因為%s在顯示寬度的時候預設是右對齊。因為老外的習慣就是這樣。如果想要左對齊語法如下:

printf "%-寬度值s"
例子:

[root@algento-1~

]# printf "#%-10s#\n" hello

#hello #

[root@algento-1 ~]

# cat printf_test.sh

#!/bin/bash

username=($(

head -10 /etc/passwd |

awk -f: ''))

user_num=

$uid=($(

head -10 /etc/passwd |

awk -f: ''))

for((i =

0; i < $user_num; i++));

doprintf

"%s%d\n"$$

done

執行結果:每乙個使用者名稱後邊都緊跟著uid

[root@algento-1 ~]

# sh printf_test.sh

root0

bin1

daemon2

adm3

lp4sync5

shutdown6

halt7

mail8

operator11

更改此行**:

printf "%-10s%d\n" $ $
對齊之後

[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

shell指令碼之printf命令列印技巧

printf 命令模仿 c 程式庫 library 裡的 printf 程式。printf 由 posix 標準所定 義,因此使用 printf 的指令碼比使用 echo 移植性好。printf 使用引用文字或空格分隔的 引數,外面可以在 printf 中使用格式化字串,還可以制定字串的寬度 左右對...

shell 指令碼之for

subdir joan joanna for subdir in subdir doecho building subdir done 結果 building joan building joanna 結果正常。subdir 1 2 3 4 for subdir in subdir doecho b...

用shell指令碼監控系統

簡單的用shell指令碼寫乙個 監控 程式作為思路,大致為 實時檢測系統的記憶體使用率,如果大於閾值那麼報警 如果有條件可以使用簡訊介面或者實在不行可以使用郵件通知 並記錄到日誌檔案裡,如果小於閾值那麼正常顯示。bin bash check mem 100 free grep i mem awk b...