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>
閱讀更多 大文豪賢斌學長 的文章