Shell echo命令 Linux的echo命令, 在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到的, 因此有必要了解下echo的用法。其主要用于字符串的輸出。命令格式: # echo [Options] [String] 方括號中的項目是可選的。字符串可以定義為字符的有限序列(如字母,數(shù)字,符號,標(biāo)點(diǎn)符號)。 當(dāng)echo命令不帶任何選項或字符串使用時,它會在顯示屏上返回一個空白行,后面換一行跟上命令提示符。這是因?yàn)榘聪禄剀囨I就是發(fā)送一個信號給系統(tǒng)以開始一個新行,而echo重復(fù)了該信號。 # 該命令的一般格式為:echo [ -n ] 字符串 其中選項-n表示輸出文字后不換行;字符串能加引號,也能不加引號。 用echo命令輸出加引號的字符串時,將字符串原樣輸出;用echo命令輸出不加引號的字符串時,將字符串中的各個單詞作為字符串輸出,各字符串之間用一個空格分割。 Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用于字符串的輸出。 您可以使用echo實(shí)現(xiàn)更復(fù)雜的輸出格式控制。 顯示普通字符串: echo "It is a test" 這里的雙引號完全可以省略,以下命令與上面實(shí)例效果一致: echo It is a test 顯示轉(zhuǎn)義字符 選項: -n 不換行輸出 -e 啟用反斜線轉(zhuǎn)義解釋 -E 禁用反斜線轉(zhuǎn)義解釋(默認(rèn)) 功能說明:顯示文字。 語 法:echo [-ne][字符串] 或 echo [--help][--version] 補(bǔ)充說明:echo會將輸入的字符串送往標(biāo)準(zhǔn)輸出。輸出的字符串間以空白字符隔開, 并在最后加上換行號。 參 數(shù):-n 不要在最后自動換行 。-e 若字符串中出現(xiàn)以下字符,則特別加以處理,而不會將它當(dāng)成一般文字輸出: \a 發(fā)出警告聲; \b 刪除前一個字符; \c 最后不加上換行符號; \f 換行但光標(biāo)仍舊停留在原來的位置; \n 換行且光標(biāo)移至行首; \r 光標(biāo)移至行首,但不換行; \t 插入tab; \v 與\f相同; \\ 插入\字符; \nnn 插入nnn(八進(jìn)制)所代表的ASCII字符; –help 顯示幫助 –version 顯示版本信息 echo "\"It is a test\"" 結(jié)果將是: "It is a test" 同樣,雙引號也可以省略 顯示變量 read 命令從標(biāo)準(zhǔn)輸入中讀取一行,并把輸入行的每個字段的值指定給 shell 變量 #!/bin/sh read name echo "$name It is a test" 以上代碼保存為 test.sh,name 接收標(biāo)準(zhǔn)輸入的變量,結(jié)果將是: [root@www ~]# sh test.sh Good #標(biāo)準(zhǔn)輸入 Good It is a test #輸出 顯示換行 echo -e "Good!\n" # -e 開啟轉(zhuǎn)義 echo "It is a test" 輸出結(jié)果: Good! It is a test 顯示不換行 #!/bin/sh echo -e "Good! \c" # -e 開啟轉(zhuǎn)義 \c 不換行 echo "It is a test" 輸出結(jié)果: Good! It is a test 顯示結(jié)果定向至文件 echo "It is a test" > myfile 原樣輸出字符串,不進(jìn)行轉(zhuǎn)義或取變量,用單引號就可以做到。 echo '$name\"' 輸出結(jié)果: $name\" 顯示命令執(zhí)行結(jié)果 echo `date` 注意:這里使用的是反引號`,而不是單引號'。 結(jié)果將顯示當(dāng)前日期 Wednesday March 20 12:21:28 CST 2019 常用情景 Linux的echo命令, 在shell編程中極為常用, 在終端下打印變量value的時候也是常常用到。 比如:echo可用作顯示注釋,用于一些批命令中需要注釋給用戶看的地方,比如前一條命令執(zhí)行會花很長時間,常會用echo顯示一條信息讓用戶知道這個時候比較慢,稍微等待一會。 在Linux中echo命令用來在標(biāo)準(zhǔn)輸出上顯示一段字符,比如: 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 使用引用文本或空格分隔的參數(shù),外面可以在printf中使用格式化字符串,還可以制定字符串的寬度、左右對齊方式等。默認(rèn)printf不會像 echo 自動添加換行符,我們可以手動添加 \n。 printf 命令的語法: printf format-string [arguments...] 參數(shù)說明: format-string: 為格式控制字符串 arguments: 為參數(shù)列表。 實(shí)例如下: $ echo "Hello, Shell" Hello, Shell $ printf "Hello, Shell\n" Hello, Shell $ 接下來,我來用一個腳本來體現(xiàn)printf的強(qiáng)大功能: #!/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 執(zhí)行腳本,輸出結(jié)果如下所示: 姓名 性別 體重kg 楊球 男 72.12 武松 男 38.65 歐陽克 女 22.99 %s %c %d %f都是格式替代符 %-10s 指一個寬度為10個字符(-表示左對齊,沒有則表示右對齊),任何字符都會被顯示在10個字符寬的字符內(nèi),如果不足則自動以空格填充,超過也會將內(nèi)容全部顯示出來。 %-4.2f 指格式化為小數(shù),其中.2指保留2位小數(shù)。 %d %s %c %f 格式替代符詳解 d:Decimal 十進(jìn)制整數(shù) 對應(yīng)位置參數(shù)必須是十進(jìn)制整數(shù),否則報錯! s:String 字符串 對應(yīng)位置參數(shù)必須是字符串或者字符型 否則報錯 c:Char 字符 對應(yīng)位置參數(shù)必須是字符串或者字符型 否則報錯 f: Float 浮點(diǎn) 對應(yīng)位置參數(shù)必須是數(shù)字型 否則報錯 實(shí)例: #!/bin/bash # author:Agile Tao # format-string為雙引號 printf "%d %s\n" 1 "abc" # 單引號與雙引號效果一樣 printf '%d %s\n' 1 "abc" # 沒有引號也可以輸出 printf %s abcdef # 格式只指定了一個參數(shù),但多出的參數(shù)仍然會按照該格式輸出,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" 執(zhí)行腳本,輸出結(jié)果如下所示: 1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0 printf的轉(zhuǎn)義序列 序列說明 \a 警告字符,通常為ASCII的BEL字符 \b 后退 \c 抑制(不顯示)輸出結(jié)果中任何結(jié)尾的換行字符(只在%b格式指示符控制下的參數(shù)字符串中有效),而且,任何留在參數(shù)里的字符、任何接下來的參數(shù)以及任何留在格式字符串中的字符,都被忽略 \f 換頁(formfeed) \n 換行 \r 回車(Carriage return) \t 水平制表符 \v 垂直制表符 \\ 一個字面上的反斜杠字符 \ddd 表示1到3位數(shù)八進(jìn)制值的字符。僅在格式字符串中有效 \0ddd 表示1到3位的八進(jìn)制值字符 實(shí)例 $ printf "a string, no processing:<%s>\n" "X\nY" a string, no processing:<X\nY> $ printf "a string, no processing:<%b>\n" "X\nY" a string, no processing:<X Y> |
|