一:條件選擇if語(yǔ)句
注意:if語(yǔ)句可嵌套
單分支:
if 判斷條件;then
? ? ? ? ? 條件為真的分支代碼
fi
雙分支:
if 判斷條件;the
? ? ? ?條件為真的分支代碼
else
條件為假的分支代碼
fi
多分支
if 判斷條件1;then
? ? ? ? 條件為真的分支代碼
elif 判斷條件2;then
? ? ? ? ? 條件為真的分支代碼
elif 判斷條件3;then
? ? ? ? ? ? 條件為真的分支代碼
else
? ? ? ? ? ? 以上條件都為假的分支代碼
fi
注:逐條件進(jìn)行判斷,第一次遇為“真”條件時(shí),執(zhí)行奇分支,然后結(jié)束整個(gè)if語(yǔ)句
針對(duì)上述條件的練習(xí)題;
1,編寫(xiě)腳本/root/bin/createuser.sh,實(shí)現(xiàn)如下功能:使用一個(gè)用戶(hù)名做為參 數(shù),如果指定參數(shù)的用戶(hù)存在,就顯示其存在,否則添加之;顯示添加的用戶(hù) 的id號(hào)等信息


2,編寫(xiě)腳本/root/bin/checkint.sh,判斷用戶(hù)輸入的參數(shù)是否為正整數(shù)


二:條件判斷:case語(yǔ)句
語(yǔ)法格式:
case 變量引用 in
PATH1)
? ? ? ? 分支1
? ? ? ? ;;
PATH2)
? ? ? ? ? ? 分支2
? ? ? ? ? ? ? ? ;;
........
*)
默認(rèn)分支
? ? ? ? ;;
esac????
注:case支持glob風(fēng)格的通配符:
*:任意長(zhǎng)度的任意字符
?:任意單個(gè)字符
[]:指定范圍內(nèi)的任意單個(gè)字符
a|b:a或b
1,針對(duì)上述語(yǔ)句的練習(xí)題示范
2、編寫(xiě)腳本/root/bin/yesorno.sh,提示用戶(hù)輸入yes或no,并判斷用戶(hù)輸入的 是yes還是no,或是其它信息


2,編寫(xiě)腳本/root/bin/filetype.sh,判斷用戶(hù)輸入文件路徑,顯示其文件類(lèi)型 (普通,目錄,鏈接,其它文件類(lèi)型)


三,循環(huán)
循環(huán)執(zhí)行
? ? 將某段代碼重復(fù)運(yùn)行多次
? ? 重復(fù)運(yùn)行多少次
? ? 循環(huán)次數(shù)事先已知
? ? 循環(huán)次數(shù)事先未知
有進(jìn)入條件和退出條件
循環(huán)又分為三種:for,while,until
1,for循環(huán)
語(yǔ)法格式
for 變量名 in 列表;do
? ? ? ? 循環(huán)體
done
執(zhí)行機(jī)制:
依次將列表中的元素賦值給:變量名”每次賦值后即執(zhí)行一次循環(huán)體;直到列表中的元素耗盡,循環(huán)結(jié)束
列表的生成方式
(1)直接給出列表
(2)整數(shù)列表:
? ? ? ? (a) {start..end}
? ? ? ? (b) $(seq [start[step]] end)
(3)返回列表的命令
$(COMMAND)
(4)使用glob,如:*.sh
(5)變量引用;
$@,$*
針對(duì)for循環(huán)下的練習(xí)題
1,判斷/var/目錄下所有文件的類(lèi)型


2,添加10個(gè)用戶(hù)user1-user10,密碼為8位隨機(jī)字符


3。/etc/rc.d/rc3.d目錄下分別有多個(gè)以K開(kāi)頭和以S開(kāi)頭的文件;分別讀取每個(gè)文件, 以K開(kāi)頭的輸出為文件加stop,以S開(kāi)頭的輸出為文件名加start,如K34filename stop S66filename start


4、編寫(xiě)腳本,提示輸入正整數(shù)n的值,計(jì)算1+2+…+n的總和


5、計(jì)算100以?xún)?nèi)所有能被3整除的整數(shù)之和


6,打印九九乘法表。


7,在/testdir目錄下創(chuàng)建10個(gè)html文件,文件名格式為數(shù)字N(從1到10)加隨機(jī)8個(gè)字 母,如:1AbCdeFgH.html

四:while循環(huán)
while CONDITION;do
? ? ? ? ? ? ? ? ? ?循環(huán)體
done
CONDITION:循環(huán)控制條件;進(jìn)入循環(huán)之前,先在一次判斷;每一次循環(huán)之后會(huì)再次做判斷;條件為“true”,則執(zhí)行一次循環(huán);直到條件測(cè)試狀態(tài)為“false"終止循環(huán)
因此;CONDTION一般應(yīng)該又循環(huán)控制變量而此變量的值會(huì)在循環(huán)體不斷地被修正
進(jìn)入條件:CONDITION為true
退出條件:CONDITION為false
針對(duì)以上條件所做的練習(xí)題
1,編寫(xiě)腳本,求100以?xún)?nèi)所有正奇數(shù)之和


2、編寫(xiě)腳本,打印九九乘法表


3、編寫(xiě)腳本,實(shí)現(xiàn)打印國(guó)際象棋棋盤(pán)


4、編寫(xiě)腳本,利用變量RANDOM生成10個(gè)隨機(jī)數(shù)字,輸出這個(gè)10數(shù)字,并顯 示其中的最大值和最小值


五,until循環(huán) ? (與while循環(huán)條件相反,很少用)
語(yǔ)法:until CONDITON ;do
? ? ? ? ? ? 循環(huán)體
done
進(jìn)入條件:CONDITION為false
退出條件:CONDITION為true
練習(xí)until:
每隔3秒鐘到系統(tǒng)上獲取已經(jīng)登錄的用戶(hù)的信息;如果發(fā) 現(xiàn)用戶(hù)liyi登錄,則將登錄時(shí)間和主機(jī)記錄于日志 /data/login.log中,并退出腳本


六,循環(huán)控制語(yǔ)句continue
在循環(huán)任務(wù)中,如果遇到continue就跳過(guò)本次循環(huán),執(zhí)行下一次循環(huán)
continue 后面加參數(shù)continue [N] 指定結(jié)束第N層的本輪循環(huán),而直接進(jìn)入下一輪判斷;最內(nèi)層為 第1層
示例:
while CONDTIITON1; do
?????CMD1
?????...?
?????if CONDITION2; then?
?????continue ? ? ? ? ? ? ? ? ? ? ?#如果滿(mǎn)足第二個(gè)條件執(zhí)行continue命令
?????fi?
?????????CMDn ? ? ? ? ? ? ? ? ? ?#跳過(guò)接下來(lái)要執(zhí)行的任務(wù)而不是退出循環(huán)
?????...?
?????done
七,循環(huán)控制語(yǔ)句break
在循環(huán)體中遇見(jiàn)break則結(jié)束整個(gè)任務(wù)。
break后面加參數(shù) bark[N]指定提前結(jié)束第N層循環(huán),最內(nèi)層為第一層
示例:
while CONDTIITON1;do
? ? CMD1
? ? ....
if CONDITION2;THEN
? ? ? ? break ? ? ? #如果條件2滿(mǎn)足條件,執(zhí)行break結(jié)束整個(gè)循環(huán)
fi
CMDn
....
done
八,循環(huán)控制shift命令
shift [n]?
用于將參量列表 list 左移指定次數(shù),缺省為左移一次。?
參量列表 list 一旦被移動(dòng),最左端的那個(gè)參數(shù)就從列表中刪除。
while 循環(huán)遍 歷位置參量列表時(shí),常用到 shift
練習(xí)shift


九,特殊用法
while循環(huán)的特殊用法(遍歷文件的每一行):
語(yǔ)法:
while read line; do
????????循環(huán)體
done < /PATH/FROM/SOMEFILE
依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line
雙小括號(hào)寫(xiě)法:即((…))格式,也可以用于算術(shù)運(yùn)算
雙小括號(hào)方法也可以使bash Shell實(shí)現(xiàn)C語(yǔ)言風(fēng)格的變量操作
? ??I=10?
? ??((I++))
for循環(huán)的特殊格式:
for ((控制變量初始化;條件判斷表達(dá)式;控制變量的修正表達(dá)式))
do
? ??????????循環(huán)體?? ??
done
控制變量初始化:僅在運(yùn)行到循環(huán)代碼段時(shí)執(zhí)行一次
控制變量的修正表達(dá)式:每輪循環(huán)結(jié)束會(huì)先進(jìn)行控制變量修正運(yùn)算,而后再做 條件判斷
十,select循環(huán)與菜單
語(yǔ)法:
select variable in list
? ? do
循環(huán)體命令
done
select 循環(huán)主要用于創(chuàng)建菜單,按數(shù)字順序排列的菜單項(xiàng)將顯示在 標(biāo)準(zhǔn)錯(cuò)誤上,并顯示 PS3 提示符,等待用戶(hù)輸入
用戶(hù)輸入菜單列表中的某個(gè)數(shù)字,執(zhí)行相應(yīng)的命令
用戶(hù)輸入被保存在內(nèi)置變量 REPLY 中
slect 與case
select 循環(huán)主要用于創(chuàng)建菜單,按數(shù)字順序排列的,它是個(gè)無(wú)限循環(huán),因此要記住用 break 命令退 出循環(huán),或用 exit 命令終止腳本。也可以按 ctrl+c 退出循環(huán)
select 經(jīng)常和 case 聯(lián)合使用
舉例:創(chuàng)建菜單和退出菜單


十一,信號(hào)補(bǔ)捉
trap '觸發(fā)指令' 信號(hào)
自定義進(jìn)程收到系統(tǒng)發(fā)出的指定信號(hào)后,將執(zhí)行觸發(fā)指令,而不會(huì)執(zhí)行原操作
trap '' 信號(hào) ?:忽略信號(hào)的操作
trap '-' 信號(hào) :恢復(fù)原信號(hào)的操作
trap -p ? :列出自定義信號(hào)操作
示例:
打印數(shù)字捕捉信號(hào)


完結(jié)。