1.特殊文件:/dev/null與/dev/tty
/dev/null:bit bucket(位桶)骂际,傳送到此文件的數(shù)據(jù)都會(huì)被系統(tǒng)丟掉坛怪。相當(dāng)于當(dāng)程序?qū)?shù)據(jù)寫到此文件時(shí)镇防,會(huì)認(rèn)為>已經(jīng)完成寫入的操作,但實(shí)際上是把數(shù)據(jù)丟到了垃圾桶森篷,什么事情都沒(méi)有做输钩。當(dāng)你需要命令的退出狀態(tài),而非是它的輸出仲智,此功能十分有用买乃。
例如:測(cè)試一個(gè)文件是否含有某個(gè)模式時(shí)
if grep pattern file > /dev/null
then
...... 找到模式時(shí)
else
......沒(méi)有匹配到
fi
/dev/tty :當(dāng)程序打開此文件時(shí),unix會(huì)自動(dòng)將它定向到一個(gè)終端钓辆,在程序必須讀取人工輸入時(shí)有用剪验。
2.位置參數(shù):$0,$9,$[10]...
指的是shell腳本的命令行參數(shù)肴焊。位置參數(shù)是shell的一種特殊的變量,用于運(yùn)行shell的時(shí)候向程序傳遞參數(shù)功戚;
變量 $[nn] 表示第 nn 個(gè)位置參數(shù)娶眷;如不使用花括號(hào),變量 $nn 的值不是第 nn 個(gè)位置參數(shù)的值啸臀,而是第 n 個(gè)位置參數(shù)的值后面加上 n;
命令行:sh test.sh 1 2 3 4 5 6 7 8 9
就是在向shell程序傳遞1-9届宠,分別傳遞給程序中$1-$9,程序中就可以用到這些值了乘粒,因?yàn)楦恢糜嘘P(guān)系豌注,所以叫位置參數(shù)。
3 if-elif-else-fi語(yǔ)句
在shell中用 if then elif else fi實(shí)現(xiàn)分支控制灯萍,有三種if......else 語(yǔ)句:
- if.......fi語(yǔ)句
if [ expression ]
then
Statement(s) to be executed if expression is true
fi
expression 返回 true轧铁,then 后邊的語(yǔ)句將會(huì)被執(zhí)行;如果返回 false旦棉,不會(huì)執(zhí)行任何語(yǔ)句齿风。
if命令的參數(shù)組成一條子命令,如果該子命令的exit states (退出狀態(tài))為0绑洛,表示為真救斑,執(zhí)行then后面的子命令。非0真屯,為假系谐,則會(huì)執(zhí)行elif,else讨跟,或者fi后面的子命令纪他。
- if ... else ... fi 語(yǔ)句的語(yǔ)法:
if [ expression ]
then
Statement(s) to be executed if expression is true
else
Statement(s) to be executed if expression is not true
fi
如果 expression 返回 true,那么 then 后邊的語(yǔ)句將會(huì)被執(zhí)行晾匠;否則茶袒,執(zhí)行 else 后邊的語(yǔ)句。
- if ... elif ... fi 語(yǔ)句
if ... elif ... fi 語(yǔ)句可以對(duì)多個(gè)條件進(jìn)行判斷凉馆,語(yǔ)法為:
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
哪一個(gè) expression 的值為 true薪寓,就執(zhí)行哪個(gè) expression 后面的語(yǔ)句;如果都為 false澜共,那么執(zhí)行else語(yǔ)句向叉。
注意:if與[]之間有空格。[與expression之間要有空格嗦董,[與母谎;之間不需要空格,命令和參數(shù)之間必須用空格隔開京革。
4.邏輯的NOT奇唤、AND幸斥、與OR
有時(shí)以否定狀態(tài)表示if的條件匹配:
- if ! grep pattern file >/dev/null
then
..................
fi
測(cè)試多個(gè)子條件:
- if grep pattern1 filename && grep pattern2 filename
then
..............................
fi
shell會(huì)先執(zhí)行 第一個(gè),成功推出咬扇,執(zhí)行第二個(gè)甲葬。兩個(gè)都成功,整個(gè)語(yǔ)句成功懈贺,執(zhí)行then后面的子命令
|| 同&&用法一樣经窖,只不過(guò)有一個(gè)成功,就視為條件語(yǔ)句成功梭灿。
5.test命令
test命令可以處理shell腳本里各類的工作钠至,產(chǎn)生的并不是一般的輸出,而是可使用的退出狀態(tài)胎源。test理解成測(cè)試命令即可。test命令另一種用法較為常見(jiàn)[.....]
if test "$str1"="$str2"
then
................
fi
if [ "$str1"="$str2"]
then
................
fi
這兩種用法一樣屿脐,通常使用后一種涕蚤。
test主要用來(lái)測(cè)試文件屬性,比較字符串及數(shù)字.
-d file file是目錄
-e file file存在
-f file file 是一般文件
.......
s1 -eq s2 相等
-ne 不等
n1 -lt n2 小于
-gt 大于
-le 小于等于
-ge 大于等于
注意:在字符串比較的時(shí)候的诵,有一種使用方式
if [ "X$str1"="Xgr" ]
在字符串前置字母X万栅,為了防止字符串為空,導(dǎo)致test被混淆西疤。