上一節我們學習了 shell 的 echo 命令,本節我們來學習 shell 的另乙個輸出命令 printf。printf 命令的語法:printf 命令模仿 c 程式庫(library)裡的 printf() 程式。
printf 由 posix 標準所定義,因此使用 printf 的指令碼比使用 echo 移植性好。
printf 使用引用文字或空格分隔的引數,外面可以在 printf 中使用格式化字串,還可以制定字串的寬度、左右對齊方式等。預設 printf 不會像 echo 自動新增換行符,我們可以手動新增 \n。
printf
format-string [arguments...]
引數說明:
例項如下:
$ echo
"hello, shell"
hello, shell
$ printf
"hello, shell\n"
hello, shell
$
接下來,我來用乙個指令碼來體現printf的強大功能:
#!/bin/bash
printf
"%-10s %-8s %-4s\n" 姓名 性別 體重kg
printf
"%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf
"%-10s %-8s %-4.2f\n" 楊過 男 48.6543
printf
"%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
執行指令碼,輸出結果如下所示:
姓名 性別 體重kg
郭靖 男 66.12
楊過 男 48.65
郭芙 女 47.99
%s %c %d %f都是格式替代符printf的轉義序列%-10s 指乙個寬度為10個字元(-表示左對齊,沒有則表示右對齊),任何字元都會被顯示在10個字元寬的字元內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。
%-4.2f 指格式化為小數,其中.2指保留2位小數。
序列說明
\a警告字元,通常為ascii的bel字元
\b後退
\c抑制(不顯示)輸出結果中任何結尾的換行字元(只在%b格式指示符控制下的引數字串中有效),而且,任何留在引數裡的字元、任何接下來的引數以及任何留在格式字串中的字元,都被忽略
\f換頁(formfeed)
\n換行
\r回車(carriage return)
\t水平製表符
\v垂直製表符
\\乙個字面上的反斜槓字元
\ddd
表示1到3位數八進位制值的字元。僅在格式字串中有效
\0ddd
表示1到3位的八進位制值字元 例項
$ printf
"a string, no processing:<%s>\n"
"a\nb"
a string, no processing:$ printf
"a string, no processing:<%b>\n"
"a\nb"
a string, no processing:$ printf
"www.runoob.com \a"
www.runoob.com $ #不換行
#!/bin/bash
# format-string為雙引號
printf
"%d%s\n"
1"abc"
# 單引號與雙引號效果一樣
printf
'%d %s\n'
1"abc"
# 沒有引號也可以輸出
printf
%s abcdef
# 格式只指定了乙個引數,但多出的引數仍然會按照該格式輸出,format-string 被重用
printf
%s abc def
printf
"%s\n" abc def
printf
"%s%s
%s\n" a b c d e f g h i j
# 如果沒有 arguments,那麼 %s 用null代替,%d 用 0 代替
printf
"%s and %d \n"
執行指令碼,輸出結果如下所示:
1 abc
1 abc
abcdefabcdefabc
defa b c
d e f
g h i
j and
0
printf列印輸出彩色資訊輔助除錯
向來寫的除錯資訊都是隨意輸出,無論是檢視起來還是寫起 來都不方便,於是寫了乙個debug資訊輸出庫,便於輸出debug資訊。debug 資訊分為close,info,warning,error,critical五級,分別以不同的顏色輸出,使用debug1,debug2,debug3,debug4巨集...
Linux 5 6 Shell列印輸出指令
echo it is a test 這裡的雙引號完全可以省略,以下命令與上面例項效果一致 echo it is a testecho it is a test 結果將是 it is a test bin sh read name echo name it is a test root www sh ...
列印輸出部門結構
列印出部門結構 如下 連線資料庫,並且獲取資料。link mysqli connect localhost mysqli select db link,test sql select from print where 1 retval mysqli query link,sql array arra...