和即將用到Shell的人們談談echo命令和printf 命令


和即將用到Shell的人們談談echo命令和printf 命令

Shell echo命令

Linux的echo命令, 在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到的, 因此有必要了解下echo的用法。其主要用於字符串的輸出。命令格式:

# echo [Options] [String]

方括號中的項目是可選的。字符串可以定義為字符的有限序列(如字母,數字,符號,標點符號)。

當echo命令不帶任何選項或字符串使用時,它會在顯示屏上返回一個空白行,後面換一行跟上命令提示符。這是因為按下回車鍵就是發送一個信號給系統以開始一個新行,而echo重複了該信號。

# 該命令的一般格式為: echo [ -n ] 字符串

其中選項-n表示輸出文字後不換行;字符串能加引號,也能不加引號。

用echo命令輸出加引號的字符串時,將字符串原樣輸出;用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作為字符串輸出,各字符串之間用一個空格分割。

Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用於字符串的輸出。

您可以使用echo實現更復雜的輸出格式控制。

顯示普通字符串:

echo "It is a test"

這裡的雙引號完全可以省略,以下命令與上面實例效果一致:

echo It is a test

顯示轉義字符

選項:

-n 不換行輸出

-e 啟用反斜線轉義解釋

-E 禁用反斜線轉義解釋(默認)

功能說明:顯示文字。

語   法:echo [-ne][字符串] 或 echo [--help][--version]

補充說明:echo會將輸入的字符串送往標準輸出。輸出的字符串間以空白字符隔開, 並在最後加上換行號。

參   數:-n 不要在最後自動換行 。-e 若字符串中出現以下字符,則特別加以處理,而不會將它當成一般文字輸出:

\\a 發出警告聲;

\\b 刪除前一個字符;

\\c 最後不加上換行符號;

\\f 換行但光標仍舊停留在原來的位置;

\\n 換行且光標移至行首;

\\r 光標移至行首,但不換行;

\\t 插入tab;

\\v 與\\f相同;

\\\\ 插入\\字符;

\\nnn 插入nnn(八進制)所代表的ASCII字符;

–help 顯示幫助

–version 顯示版本信息

echo "\"It is a test\""

結果將是:

"It is a test"

同樣,雙引號也可以省略

顯示變量

read 命令從標準輸入中讀取一行,並把輸入行的每個字段的值指定給 shell 變量

#!/bin/sh

read name

echo "$name It is a test"

以上代碼保存為 test.sh,name 接收標準輸入的變量,結果將是:

[root@www ~]# sh test.sh

Good #標準輸入

Good It is a test #輸出

顯示換行

echo -e "Good!\\n" # -e 開啟轉義

echo "It is a test"

輸出結果:

Good!

It is a test

顯示不換行

#!/bin/sh

echo -e "Good! \\c" # -e 開啟轉義 \\c 不換行

echo "It is a test"

輸出結果:

Good! It is a test

顯示結果定向至文件

echo "It is a test" > myfile

原樣輸出字符串,不進行轉義或取變量,用單引號就可以做到。

echo '$name\"'

輸出結果:

$name\"

顯示命令執行結果

echo `date`

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

結果將顯示當前日期

Wednesday March 20 12:21:28 CST 2019

常用情景

Linux的echo命令, 在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到。

比如:echo可用作顯示註釋,用於一些批命令中需要註釋給用戶看的地方,比如前一條命令執行會花很長時間,常會用echo顯示一條信息讓用戶知道這個時候比較慢,稍微等待一會。

在Linux中echo命令用來在標準輸出上顯示一段字符,比如:

echo "the echo command test!"

這個就會輸出“the echo command test!”這一行文字!

echo "the echo command test!">a.sh

這個就會在a.sh文件中輸出“the echo command test!”這一行文字! 該命令的一般格式為: echo [ -n ] 字符串其中選項n表示輸出文字後不換行;字符串能加引號,也能不加引號。用echo命令輸出加引號的字符串時,將字符串原樣輸出;用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作為字符串輸出,各字符串之間用一個空格分割。

Shell printf 命令

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

printf 命令的語法:

printf format-string [arguments...]

參數說明:

format-string: 為格式控制字符串

arguments: 為參數列表。

實例如下:

$ echo "Hello, Shell"

Hello, Shell

$ printf "Hello, Shell\\n"

Hello, Shell

$

接下來,我來用一個腳本來體現printf的強大功能:

#!/bin/bash

# author: Agile Tao

printf "%-10s %-8s %-4s\\n" 姓名 性別 體重kg

printf "%-10s %-8s %-4.2f\\n" 楊球 男 72.1234

printf "%-10s %-8s %-4.2f\\n" 武松 男 38.6543

printf "%-10s %-8s %-4.2f\\n" 歐陽克 女 22.9876

執行腳本,輸出結果如下所示:

姓名 性別 體重kg

楊球 男 72.12

武松 男 38.65

歐陽克 女 22.99

%s %c %d %f都是格式替代符

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

%-4.2f 指格式化為小數,其中.2指保留2位小數。

%d %s %c %f 格式替代符詳解

d:Decimal 十進制整數 對應位置參數必須是十進制整數,否則報錯!

s:String 字符串 對應位置參數必須是字符串或者字符型 否則報錯

c:Char 字符 對應位置參數必須是字符串或者字符型 否則報錯

f: Float 浮點 對應位置參數必須是數字型 否則報錯

實例:

#!/bin/bash

# author:Agile Tao

# 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

def

a b c

d e f

g h i

j

and 0

printf的轉義序列

序列說明

\\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:\\n" "X\\nY"

a string, no processing:

$ printf "a string, no processing:\\n" "X\\nY"

a string, no processing:

Y>

"


分享到:


相關文章: