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...