繼續(xù)前一篇的文章:
shell 腳本的使用該熟練起來了,你說呢?(篇一)
shell 腳本的使用該熟練起來了,你說呢?(篇二)
文章里面測試的命令腳本文件,大家關(guān)注我公眾號后,可以私信我領(lǐng)取文件。
Shell echo 命令
Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用于字符串的輸出。命令格式:
echo string
您可以使用 echo 實(shí)現(xiàn)更復(fù)雜的輸出格式控制。
1. 顯示普通字符串:
echo "It is a test"
// 這里的雙引號完全可以省略,以下命令與上面實(shí)例效果一致
echo It is a test
?
2. 顯示轉(zhuǎn)義字符
echo?""It?is?a?test""
結(jié)果將是:
同樣,雙引號也可以省略
?
3. 顯示變量
read 命令從標(biāo)準(zhǔn)輸入中讀取一行,并把輸入行的每個字段的值指定給 shell 變量
read
nameecho "$name It is a test"
以上代碼保存為 hello_shell.sh,name 接收標(biāo)準(zhǔn)輸入的變量,結(jié)果將是:
?
4. 顯示換行
echo?-e?"OK!?n"???# -e?開啟轉(zhuǎn)義
echo "It is a test"
輸出結(jié)果:
?
5. 顯示不換行
echo -e "OK! c" # -e 開啟轉(zhuǎn)義 c 不換行
echo "It is a test"
輸出結(jié)果:
?
6. 顯示結(jié)果定向至文件
echo "It is a test" > lynfile
./hello_shell.sh 執(zhí)行腳本,當(dāng)前目錄下就會生成一個?lynfile 文件,里面的內(nèi)容為 It is a test
?
7. 原樣輸出字符串,不進(jìn)行轉(zhuǎn)義或取變量(用單引號)
echo '$name"'
輸出結(jié)果:
?
8. 顯示命令執(zhí)行結(jié)果
echo `date`
注意:?這里使用的是反引號?`, 而不是單引號?'。
結(jié)果將顯示當(dāng)前日期
Shell printf 命令
我們學(xué)習(xí)了 Shell 的 echo 命令,我們再來學(xué)習(xí) Shell 的另一個輸出命令 printf。
printf 命令模仿 C 程序庫(library)里的 printf() 程序。
printf 由 POSIX 標(biāo)準(zhǔn)所定義,因此使用 printf 的腳本比使用 echo 移植性好。
printf 使用引用文本或空格分隔的參數(shù),外面可以在 printf 中使用格式化字符串,還可以制定字符串的寬度、左右對齊方式等。默認(rèn) printf 不會像 echo 自動添加換行符,我們可以手動添加 n。
printf 命令的語法:
printf format-string [arguments...]
參數(shù)說明:
format-string:?為格式控制字符串
arguments:?為參數(shù)列表。
實(shí)例如下:
echo "echo Hello, Shell" lyn, actionprintf?"printf?Hello,?Shelln"?lyn,?action
接下來,我來用一個腳本來體現(xiàn) printf 的強(qiáng)大功能:
printf "%-10s %-8s %-4sn" 姓名 性別 體重 kgprintf "%-10s %-8s %-4.2fn" 張三 男 66.1234
printf "%-10s %-8s %-4.2fn" 李四 男 48.6543
printf "%-10s %-8s %-4.2fn" 王五 女 47.9876
執(zhí)行腳本,輸出結(jié)果如下所示:
更多實(shí)例:
#?format-string 為雙引號printf "%d %sn" 1 "abc" # 單引號與雙引號效果一樣
printf '%d %sn' 1 "abc"
# 沒有引號也可以輸出
printf %s abcdef
printf "n"
# 格式只指定了一個參數(shù),但多出的參數(shù)仍然會按照該格式輸出,format-string 被重用
printf %s abc def
printf "n"
printf "%sn" abc def
printf "n"
printf "%s %s %sn" a b c d e f g h i j
printf "n"
# 如果沒有 arguments,那么 %s 用 NULL 代替,%d 用 0 代替
printf?"%s?and?%d?n"
執(zhí)行腳本,輸出結(jié)果如下所示:
?
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)制值的字符。僅在格式字符串中有效 |