1. echo 命令
1.1 基本使用
Shell 的 echo 指令與 PHP 的 echo 指令類似,都是用于字符串的輸出。輸出字符串時(shí),可以省略掉引號(hào)。echo命令默認(rèn)在末尾添加換行符。
username='uusama'
echo $username # 輸出 uusama
echo test # 輸出 test
echo 'test' # 輸出 test
echo there is test str # 輸出 there is test str
1.2 echo -e 轉(zhuǎn)義字符
當(dāng)要使用轉(zhuǎn)義字符時(shí),使用 echo -e,如 echo -e “\a”,發(fā)出一聲警報(bào)。
激活轉(zhuǎn)義字符。使用-e選項(xiàng)時(shí),若字符串中出現(xiàn)以下字符,則特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出:
| 序列 | 說明 |
|---|---|
| \a | 警告字符,通常為ASCII的BEL字符 |
| \b | 退格(BS) ,將當(dāng)前位置移到前一列 |
| \c | 不換行輸出,當(dāng)”\c”后面仍然存在字符時(shí),”\c”后面的字符將不會(huì)被輸出,如果”\c”后面不存在任何字符時(shí),效果與使用”echo -n”相同 |
| \f | 換頁(FF),將當(dāng)前位置移到下頁開頭 |
| \n | 換行(LF) ,將當(dāng)前位置移到下一行開頭 |
| \r | 回車(CR) ,將當(dāng)前位置移到本行開頭 |
| \t | 水平制表(HT) (跳到下一個(gè)TAB位置) |
| \v | 垂直制表(VT),換行后的新行的開頭位置連接著上一行的行尾 |
| \\ | 一個(gè)字面上的反斜杠字符 |
| \033[36m,\033[35m | 顯示天藍(lán)色文本,紫色文本 |
| \033[0m | 關(guān)閉所有屬性 |
echo -e "ab\bcdefg"
2. printf 命令
printf 命令模仿 C 程序庫(library)里的 printf() 程序。標(biāo)準(zhǔn)所定義,因此使用printf的腳本比使用echo移植性好。
printf 使用引用文本或空格分隔的參數(shù),外面可以在printf中使用格式化字符串,還可以制定字符串的寬度、左右對齊方式等。默認(rèn)printf不會(huì)像 echo 自動(dòng)添加換行符,我們可以手動(dòng)添加 \n。
2.1 使用方法
printf format-string [arguments...]
# 舉例
printf "%-10s %-8s %-4s\n" 姓名 性別 體重kg
2.2 格式化字符串
printf的第一個(gè)參數(shù)為雙引號(hào)格式化字符串,后面為參數(shù)列表,printf的詳細(xì)格式化過程可以參照C語言的printf函數(shù)。
| 格式化 | 說明 |
|---|---|
| – | 左對齊 |
| Width | 域的步長,用0表示0步長 |
| %c | ASCII字符 |
| %d, %i,%u | 十進(jìn)制整型,%u表示不帶符號(hào) |
| %e,%E | 科學(xué)計(jì)數(shù)法 |
| %f | 浮點(diǎn)型 #使用小數(shù)點(diǎn)后2位%.2f (用于除法后) |
| %g | awk決定哪種浮點(diǎn)數(shù)轉(zhuǎn)換e或者f |
| %o | 八進(jìn)制 |
| %x,%X | 十六進(jìn)制,大寫表示A-F |
| %s | 字符串 |
2.3 轉(zhuǎn)義字符
| 序列 | 說明 |
|---|---|
| \a | 警告字符,通常為ASCII的BEL字符 |
| \b | 后退 |
| \c | 抑制(不顯示)輸出結(jié)果中任何結(jié)尾的換行字符(只在%b格式指示符控制下的參數(shù)字符串中有效) |
| \f | 換頁(formfeed) |
| \n | 換行 |
| \r | 回車(Carriage return) |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \ | 一個(gè)字面上的反斜杠字符 |
| \ddd | 表示1到3位數(shù)八進(jìn)制值的字符。僅在格式字符串中有效 |
| \0ddd | 表示1到3位的八進(jìn)制值字符 |
3. test 命令
Shell中的 test 命令用于檢查某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件三個(gè)方面的測試。
3.1 數(shù)值測試
| 參數(shù) | 說明 |
|---|---|
| -eq | 等于則為真 |
| -ne | 不等于則為真 |
| -gt | 大于則為真 |
| -ge | 大于等于則為真 |
| -lt | 小于則為真 |
| -le | 小于等于則為真 |
示例:
num1=100
num2=100
if test [num1] -eq[num1]?eq[num2]
then
echo '兩個(gè)數(shù)相等!'
else
echo '兩個(gè)數(shù)不相等!'
fi
# [] 計(jì)算簡單算術(shù)運(yùn)算
echo $[num1+num2]
代碼中的 [] 執(zhí)行基本的算數(shù)運(yùn)算。
3.2 字符串測試
| 參數(shù) | 說明 |
|---|---|
| = | 等于則為真 |
| != | 不相等則為真 |
| -z 字符串 | 字符串的長度為零則為真 |
| -n 字符串 | 字符串的長度不為零則為真 |
3.3 文件測試
| 參數(shù) | 說明 |
|---|---|
| -e 文件名 | 如果文件存在則為真 |
| -r 文件名 | 如果文件存在且可讀則為真 |
| -w 文件名 | 如果文件存在且可寫則為真 |
| -x 文件名 | 如果文件存在且可執(zhí)行則為真 |
| -s 文件名 | 如果文件存在且至少有一個(gè)字符則為真 |
| -d 文件名 | 如果文件存在且為目錄則為真 |
| -f 文件名 | 如果文件存在且為普通文件則為真 |
| -c 文件名 | 如果文件存在且為字符型特殊文件則為真 |
| -b 文件名 | 如果文件存在且為塊特殊文件則為真 |
示例:
cd /bin
if test -e ./notFile -o -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
Shell還提供了與( -a )、或( -o )、非( ! )三個(gè)邏輯操作符用于將測試條件連接起來,其優(yōu)先級(jí)為:”!”最高,”-a”次之,”-o”最低。
4.常用Shell命令
4.1 文件操作
| 命令 | 示例 | 說明 |
|---|---|---|
| ls -la 或者 ll | ll | 列出當(dāng)前目錄下的所有文件和文件夾 |
| cp | cp a.txt ./b.txt | 把文件a的內(nèi)容復(fù)制到當(dāng)前目錄的b文件 |
| cat | cat a.txt >> b.txt, cat a.txt | 把a(bǔ)文件的內(nèi)容組合到b文件內(nèi)容的末尾,查了a.txt文件的內(nèi)容 |
| rm | rm -rf test | 強(qiáng)制刪除test文件夾下的所有文件 |
| mkdir | mkdir test | 創(chuàng)建 test 的目錄 |
| mv | mv a.txt b.txt | 重命名 a.txt 為 b.txt,移動(dòng)或則重命名文件 |
| cd | cd ..,cd -,cd ~ | 切換到上一級(jí)目錄,上一次瀏覽的目錄,用戶目錄 |
| pwd | pwd | 顯示當(dāng)前路徑,末尾沒有斜杠 |