快資訊:【Shell腳本(三) -- echo及printf輸出】

2022-12-12 12:06:26 來源:51CTO博客

一、Shell echo命令

Shell 的 echo 指令用于字符串的輸出。命令格式:


(相關資料圖)

echo string

1.顯示普通字符串:

echo "It is a test"echo It is a test

加不加引號效果一樣

2.顯示轉義字符

如果需要顯示轉義字符,則需要在轉義字符前加上反斜杠 \

echo "\"It is a test\""echo \"It is a test\"

輸出:

"It is a test""It is a test"

3.顯示變量

#!/bin/bashread name1 name2echo "name1:$name1 name2: $name2"

read為從標準輸入中讀取一行,并把輸入行的每個字段的值指定給 shell 變量輸出:

[root@liang shell]# ./shell01.shliang1 liang2  #此處為輸入的變量name1:liang1 name2: liang2

4.顯示換行

#!/bin/bashecho -e "first line! \n" # -e 開啟轉義  \n換行echo "It is a test"echo -e "first line! \c" # -e 開啟轉義  \c不換行echo "It is a test"

輸出:

[root@liang shell]# ./shell01.shfirst line! It is a testfirst line! It is a test

默認換行。

5.顯示結果定向至文件

echo "It is a test" > myfile

6.原樣輸出字符串,不進行轉義或取變量(用單引號)

echo "$name""輸出:

$name\"

7.顯示命令執行結果

echo `date`echo `ls`

注意: 這里使用的是反引號 `, 而不是單引號 "。

顯示當前日期及ls命令執行的結果[root@liang shell]# ./shell01.shMon Oct 26 18:13:26 CST 2020case_loop2.sh case_loop.sh def_function.sh for_loop2.sh for_loop.sh get_sys.sh homework1.sh homework.sh if_condiction.sh jisuanqi.sh one_shell.sh pass000.sh pass001.sh passwd_bk.sh shell01.sh shell02.sh sshd_config_bk sys1.txt sys.txt text0001.sh text0002.sh text0003.sh valiables.sh

二、Shell printf 命令

printf 使用引用文本或空格分隔的參數,外面可以在 printf 中使用格式化字符串,還可以制定字符串的寬度、左右對齊方式等。默認 printf 不會像 echo 自動添加換行符,我們可以手動添加 \n。

printf 命令的語法:

printf  format-string  [arguments...]

參數說明:

format-string: 為格式控制字符串arguments: 為參數列表。

printf實例

#!/bin/bashprintf "%-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

輸出:

[root@liang shell]# ./shell01.sh姓名     性別   體重kg郭靖     男      66.12楊過     男      48.65郭芙     女      47.99

最常用的格式指示符有兩個%s用于字符串,而%d或者%i用于十進制整數,%f用于浮點格式

輸出類型:
%ns:輸出字符串。n 是數字,指代輸出幾個字符;%ni:輸出整數。n 是數字,指代輸出幾個數字‘’%m.nf: 輸出浮點數。m 和 n 是數字,指代輸出的整數位數和小數位數。如 %8.2f 代表共輸出 8 位數,其中 2 位是小數,6 位是整數

%-10s 指一個寬度為10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內,如果不足則自動以空格填充,超過也會將內容全部顯示出來。

更多用法
#!/bin/bash# format-string為雙引號printf "%d %s\n" 1 "abc"# 單引號與雙引號效果一樣 printf "%d %s\n" 1 "abc" # 沒有引號也可以輸出printf %s abcdef# 格式只指定了一個參數,但多出的參數仍然會按照該格式輸出,format-string 被重用printf %s omn jkfprintf "%s\n" abc defprintf "%s %s %s\n" a b c d e f g h i j# 如果沒有 arguments,那么 %s 用NULL代替,%d 用 0 代替printf "%s and %d \n"

輸出內容:

[root@liang shell]# ./shell01.sh1 abc1 abcabcdefomnjkfabcdefa b cd e fg h ij   and 0

輸出格式:

\a: 輸出警告聲音;\b:輸出退格鍵,也就是 Backspaced 鍵;\f:清除屏幕;\n:換行;\r:回車,也就是 Enter 鍵;\t:水平輸出退格鍵,也就是 Tab 鍵;\v:垂直輸出退格鍵,也就是 Tab 鍵;實例:新建一個文件 text0001.txt

ID Name    PHP   Linux  MySQL Average1  Liming  82      95    86    87.662  Sc      74      96    87    85.663  Gao     99      83    93    91.66

直接輸出:

[root@liang shell]#  printf "%s" $(cat text0001.txt)IDNamePHPLinuxMySQLAverage1Liming82958687.662Sc74968785.663Gao99839391.66

輸出結果十分混亂。這就是 printf 命令,如果不指定輸出格式,則會把所有輸出內容連在一起輸出。其實文本的輸出本身就是這樣的,cat 等文本輸出命令之所以可以按照格式漂亮地輸出,那是因為 cat 命令已經設定了輸出格式。那么,為了用 printf 輸出合理的格式,應該這樣做:

[root@liang shell]# printf "%s\t %s\t %s\t %s\t %s\t %s\t\n" $(cat text0001.txt)ID       Name    PHP     Linux   MySQL   Average1        Liming  82      95      86      87.662        Sc      74      96      87      85.663        Gao     99      83      93      91.66

注意:在 printf 命令的單引號中輸入的任何空格都不會反映到格式輸出中,只有格式輸出符號才能影響 printf 命令的輸出結果。

因為我們的文檔有6列,所以使用 6 個"%s"代表這 6 列字符串,每個字符串之間用"\t"分隔,也可以設定字符串長度;最后還要加入"\n",使得每行輸出都換行,否則這些數據還是會連成一行的。

標簽: 輸出格式 格式輸出 轉義字符

上一篇:【Shell腳本(四) -- 流程控制】
下一篇:全球即時看!Elasticsearch Head插件使用小結