shell腳本利用shell功能寫(xiě)的純文本文件誊爹,將shell語(yǔ)法和命令寫(xiě)在里面仍秤,搭配正則表達(dá)式遥金、管道命令與數(shù)據(jù)流重定向等。不需要編譯既可執(zhí)行睛驳。最簡(jiǎn)單的功能就是整合一些連續(xù)命令烙心,將它寫(xiě)入script中,用script執(zhí)行一連串的命令輸入乏沸。但是shell script用的是外部命令和一些bash shell的一些默認(rèn)工具淫茵,調(diào)用外部函數(shù)庫(kù),所以速度慢蹬跃,占用cpu較多匙瘪。
shell腳本中的path只是臨時(shí)的環(huán)境變量,只作用于腳本執(zhí)行的過(guò)程中蝶缀。具體定義:
PATH=/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 定義臨時(shí)變量
export PATH 將臨時(shí)變量轉(zhuǎn)換為臨時(shí)環(huán)境變量
shell script執(zhí)行方式區(qū)別
1丹喻、直接命令執(zhí)行的方式
直接命令執(zhí)行或者用bash或sh執(zhí)行腳本,其實(shí)script是在子進(jìn)程內(nèi)執(zhí)行翁都,當(dāng)子進(jìn)程完成后碍论,子進(jìn)程的變量和操作不會(huì)傳回父進(jìn)程。 sh sh02.sh
2柄慰、用source 執(zhí)行腳本鳍悠,在父進(jìn)程中執(zhí)行 source sh02.sh
利用test命令檢測(cè)系統(tǒng)上某些文件或者相關(guān)的屬性
文件屬性操作
test命令可以判斷文件是否存在,以及偵測(cè)各種的文件屬性先煎。
test -e filenanme
命令參數(shù) 含義
-b file file存在贼涩,并且為塊特殊文件,則為真
-c file file存在薯蝎,并且為字符特殊文件遥倦,則為真
-d file file存在,并且為目錄占锯,則為真
-e file file存在袒哥,則為真
-f file file存在,并且為常規(guī)文件消略,則為真
-g file file存在堡称,并且設(shè)置了文件的 SGID 位,則為真
-G file file存在艺演,并且為組所有却紧,則為真
-r file file存在桐臊,并且有讀權(quán)限,則為真
-s file file存在晓殊,并且長(zhǎng)度大于0断凶,則為真
-w file file存在,并且有寫(xiě)權(quán)限巫俺,則為真
-x file file存在认烁,并且有執(zhí)行權(quán)限,則為真
算術(shù)比較運(yùn)算
在shell中介汹,test命令可以比較兩個(gè)數(shù)字的大小却嗡,相等等。
操作符 含義
num1 -eq num2 兩個(gè)數(shù)字相等嘹承,則為真
num1 -ge num2 num1大于等于num2窗价,則為真
num1 -gt num2 num1大于num2,則為真
num1 -le num2 num1小于等于num2赶撰,則為真
num1 -lt num2 num1小于num2舌镶,則為真
num1 -ne num2 num1不等于num2,則為真
邏輯運(yùn)算
test可以進(jìn)行基本的邏輯運(yùn)算
表達(dá)式 含義
test EXPRESSION EXPRESSION表達(dá)式為真豪娜,則結(jié)果為真
test ! EXPRESSION EXPRESSION表達(dá)式為假,則結(jié)果為真
test EXPRESSION1 -a EXPRESSION2 邏輯與哟楷,EXPRESSION1與EXPRESSION2都為真瘤载,結(jié)果為真
test EXPRESSION1 -o EXPRESSION2 邏輯或,EXPRESSION1與EXPRESSION2有一個(gè)為真卖擅,結(jié)果為真
判斷字符串
test –n 字符串 #字符串的長(zhǎng)度非零
test –z 字符串 #字符串的長(zhǎng)度是否為零
test 字符串1=字符串2 #字符串是否相等鸣奔,若相等返回true
test 字符串1!=字符串2 #字符串是否不等,若不等反悔false
默認(rèn)參數(shù)
$# 代表后街的參數(shù)個(gè)數(shù)
$@ 代表參數(shù)進(jìn)行羅列惩阶,$1 $2 $3這樣
$* 類(lèi)似$@
用shift對(duì)參數(shù)進(jìn)行偏移
shift 3#
支持if then fi 條件判斷語(yǔ)句
if []&&[]||[]; then
echo "OK"
exit 0
fi 結(jié)束標(biāo)志
if []; then
echo "OK"
else
XXXXXXX
fi 結(jié)束標(biāo)志
if []; then
echo "OK"
elif []; then
echo "elif"
else
echo "esle"
fi 結(jié)束標(biāo)志
支持case 參數(shù) in
“XXX” )
echo "do what you want"
;;
esac 結(jié)束符
while [condition]
do
程序體
done 結(jié)束符
until [conditon]
do
程序體
done
for 固定形式
for var in 固定值1 固定值2 固定值3
do
程序體
done
for ((s初始值;限制值;執(zhí)行步長(zhǎng)))
do
程序體
done
shell script追蹤和調(diào)試
sh [var] shellname.sh
var=
-n 不執(zhí)行挎狸,僅查語(yǔ)法錯(cuò)誤
-v 執(zhí)行前,將script內(nèi)容打印出來(lái)
-x 將執(zhí)行過(guò)程全部顯示出來(lái) 墻裂建議用這個(gè)進(jìn)行錯(cuò)誤調(diào)試