




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SHELL編程-2單元目標(biāo)1.shell條件測試2.熟悉shell中的常用語法(1)if(2)while(3)for(4)case(5)read...3.熟悉shell中函數(shù)的使用條件測試操作test命令用途:測試特定的表達(dá)式是否成立,當(dāng)條件成立時(shí),命令執(zhí)行后的返回值為0,否則為其他數(shù)值格式:test條件表達(dá)式[條件表達(dá)式]常見的測試類型測試文件狀態(tài)字符串比較整數(shù)值比較邏輯測試條件測試操作測試文件狀態(tài)格式:[操作符文件或目錄]常用的測試操作符-d:測試是否為目錄(Directory)-e:測試目錄或文件是否存在(Exist)-f:測試是否為文件(File)-r:測試當(dāng)前用戶是否有權(quán)限讀取(Read)-w:測試當(dāng)前用戶是否有權(quán)限寫入(Write)-x:測試當(dāng)前用戶是否可執(zhí)行(Excute)該文件-L:測試是否為符號連接(Link)文件[root@localhost~]#[-d/etc/vsftpd][root@localhost~]#echo$?0[root@localhost~]#[-d/etc/hosts][root@localhost~]#echo$?1返回值為0,表示上一步測試的條件成立[root@localhost~]#[-e/media/cdrom]&&echo"YES"YES[root@localhost~]#[-e/media/cdrom/Server]&&echo"YES“[root@localhost~]#如果測試的條件成立則輸出“YES”條件測試操作整數(shù)值比較格式:[整數(shù)1操作符整數(shù)2]常用的測試操作符-eq:等于(Equal)-ne:不等于(NotEqual)-gt:大于(GreaterThan)-lt:小于(LesserThan)-le:小于或等于(LesserorEqual)-ge:大于或等于(GreaterorEqual)[root@localhost~]#who|wc-l5[root@localhost~]#[`who|wc-l`-le10]&&echo"YES"YES[root@localhost~]#df-hT|grep"/boot"|awk'{print$6}'12%[root@localhost~]#BootUsage=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`[root@localhost~]#echo$BootUsage12[root@localhost~]#[$BootUsage-gt95]&&echo"YES"如果登錄用戶數(shù)小于或等于10則輸出YES如果/boot分區(qū)的磁盤使用率超過95%則輸出YES條件測試操作字符串比較格式:[字符串1=字符串2][字符串1!=字符串2][-z字符串
]常用的測試操作符=:字符串內(nèi)容相同!=:字符串內(nèi)容不同,!號表示相反的意思-z:字符串內(nèi)容為空[root@localhost~]#read-p"Location:"FilePathLocation:/etc/inittab[root@localhost~]#[$FilePath="/etc/inittab"]&&echo"YES"YES[root@localhost~]#[$LANG!="en.US"]&&echo$LANGzh_CN.UTF-8如果鍵入路徑與指定的目錄一致則輸出YES如果當(dāng)前的語言環(huán)境不是en_US,則輸出LANG變量的值條件測試操作邏輯測試格式:[表達(dá)式1]操作符[表達(dá)式2]...常用的測試操作符-a或&&:邏輯與,“而且”的意思#前后兩個(gè)表達(dá)式都成立時(shí)整個(gè)測試結(jié)果才為真,否則為假-o或||:邏輯或,“或者”的意思#操作符兩邊至少一個(gè)為真時(shí),結(jié)果為真,否則結(jié)果為假!:邏輯否#當(dāng)指定的條件不成立時(shí),返回結(jié)果為真[root@localhost~]#echo$USERroot[root@localhost~]#[$USER!="teacher"]&&echo"Notteacher"Notteacher[root@localhost~]#[$USER="teacher"]||echo"Notteacher"Notteacher如果發(fā)現(xiàn)用戶不是teacher則提示:“Notteacher”與上一命令行效果相同if條件語句
--單分支當(dāng)“條件成立”時(shí)執(zhí)行相應(yīng)的操作if
條件測試命令
then
命令序列fiif
磁盤已用空間>80%
then
報(bào)警fiif條件測試命令命令序列…fi結(jié)束判斷條件為真then條件為假if條件語句
--單分支應(yīng)用示例:如果/boot分區(qū)的空間使用超過80%,輸出報(bào)警信息#!/bin/bashRATE=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`if[$RATE-gt80]thenecho"Warning,DISKisfull!"fiif條件語句
--雙分支當(dāng)“條件成立”、“條件不成立”時(shí)執(zhí)行不同操作if條件測試命令
then命令序列1else命令序列2fiif3306端口是否在監(jiān)聽狀態(tài)
thenmysqld
服務(wù)已運(yùn)行
else啟動mysqld
服務(wù)fiif條件測試命令命令序列1…條件為真then命令序列2…條件為假
elsefi結(jié)束判斷if條件語句
--雙分支應(yīng)用示例:判斷mysqld是否在運(yùn)行,若已運(yùn)行則輸出提示信息,否則重新啟動mysqld服務(wù)#!/bin/bashservicemysqldstatus&>/dev/nullif[$?-eq0]thenecho"mysqldserviceisrunning."else/etc/init.d/mysqldrestartfiif條件語句
--多分支相當(dāng)于if語句嵌套,針對多個(gè)條件執(zhí)行不同操作if條件測試命令1;then
命令序列1elif
條件測試命令2;then
命令序列2elif...else
命令序列nfiif條件測試命令1命令序列1…條件為真then命令序列n…條件為假
elseelif條件測試命令2命令序列2…條件為真then…………fi結(jié)束判斷for循環(huán)語句根據(jù)變量的不同取值,重復(fù)執(zhí)行一組命令操作for變量名in取值列表do
命令序列donefor收件人in郵件地址列表do
發(fā)送郵件donefor變量=取值1取值1
…
取值ndone結(jié)束循環(huán)do命令序列…取值n已使用for循環(huán)語句應(yīng)用示例1:依次輸出3條文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串[root@localhost~]#vishowday.sh#!/bin/bashforTMin"Morning""Noon""Evening"doecho"The$TMoftheday."done[root@localhost~]#sh
showday.shTheMorningoftheday.TheNoonoftheday.TheEveningoftheday驗(yàn)證腳本執(zhí)行結(jié)果for循環(huán)語句應(yīng)用示例2:對于使用“/bin/bash”作為登錄Shell的系統(tǒng)用戶,檢查他們在“/opt”目錄中擁有的子目錄或文件數(shù)量,如果超過100個(gè),則列出具體個(gè)數(shù)及對應(yīng)的用戶帳號
#!/bin/bashDIR="/opt"LMT=100ValidUsers=`grep"/bin/bash"/etc/passwd|cut-d":"-f1`forUserNamein$ValidUsersdoNum=`find$DIR-user$UserName|wc-l`if[$Num-gt$LMT];thenecho"$UserNamehave$Numfiles."
fidone獲得使用bash作為登錄Shell的用戶名列表while循環(huán)語句重復(fù)測試指定的條件,只要條件成立則反復(fù)執(zhí)行對應(yīng)的命令操作
while命令或表達(dá)式
do
命令列表
done
while可用內(nèi)存<100MBdo
獲取可用內(nèi)存數(shù)
donewhile條件測試命令條件為真條件為假done結(jié)束循環(huán)do命令序列…while循環(huán)語句應(yīng)用示例1:批量添加20個(gè)系統(tǒng)用戶帳號,用戶名依次為“stu1”、“stu2”、……、“stu20”這些用戶的初始密碼均設(shè)置為“123456”#!/bin/bashi=1while[$i-le20]do
useradd
stu$iecho"123456"|passwd--stdin
stu$i&>/dev/nulli=`expr$i+1`done執(zhí)行l(wèi)eti++也可以使變量i的值遞增1while循環(huán)語句應(yīng)用示例2:批量刪除上例中添加的20個(gè)系統(tǒng)用戶帳號#!/bin/bashi=1while[$i-le20]do
userdel-rstu$ii=`expr$i+1`donecase多重分支語句根據(jù)變量的不同取值,分別執(zhí)行不同的命令操作case變量=模式1esac結(jié)束分支命令序列1…;;有變量=模式2變量=其他值(*)默認(rèn)命令序列………無是否否命令序列2…;;有無是case多重分支語句應(yīng)用示例1:編寫腳本文件mydb.sh,用于控制系統(tǒng)服務(wù)mysqld當(dāng)執(zhí)行./mydb.shstart時(shí),啟動mysqld服務(wù)當(dāng)執(zhí)行./mydb.shstop時(shí),關(guān)閉mysqld服務(wù)如果輸入其他腳本參數(shù),則顯示幫助信息#!/bin/bash
case$1instart)echo"StartMySQLservice.";;stop)echo"StopMySQLservice.";;*)echo"Usage:$0start|stop";;esaccase多重分支語句應(yīng)用示例2:提示用戶從鍵盤輸入一個(gè)字符,判斷該字符是否為字母、數(shù)字或者其它字符,并輸出相應(yīng)的提示信息#!/bin/bashread-p"Presssomekey,thenpressReturn:“KEYcase"$KEY“in[a-z]|[A-Z])echo"It'saletter.";;[0-9])echo"It'sadigit.";;*)echo"It'sfunctionkeys、Spacebarorotherkeys."esacshift遷移語句用于遷移位置變量,將$1~$9依次向左傳遞1.例如,若當(dāng)前腳本程序獲得的位置變量如下:
$1=file1、$2=file2、$3=file3、$4=file42.則執(zhí)行一次shift命令后,各位置變量為:
$1=file2、$2=file3、$3=file43.再次執(zhí)行shift命令后,各位置變量為:
$1=file3、$2=file4shift遷移語句應(yīng)用示例:通過命令行參數(shù)傳遞多個(gè)整數(shù)值,并計(jì)算總和[root@localhost~]#vishowday.sh#!/bin/bashResult=0while[$#-gt0]doResult=`expr$Result+$1`shiftdoneecho"Thesumis:$Result"[root@localhost~]#./sumer.sh123456Thesumis:102驗(yàn)證腳本執(zhí)行結(jié)果while命令do…………break…………done……循環(huán)控制語句break語句在for、while、until等循環(huán)語句中,用于跳出當(dāng)前所在的循環(huán)體,執(zhí)行循環(huán)體后的語句通常在循環(huán)體中與條件語句一起使用跳出循環(huán)whiledo…………continue…………done……循環(huán)控制語句continue在for、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 常州工程職業(yè)技術(shù)學(xué)院《高級阿拉伯語二》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆科技學(xué)院《外國史學(xué)名著選讀》2023-2024學(xué)年第二學(xué)期期末試卷
- 淮北理工學(xué)院《社會學(xué)原理類》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶智能工程職業(yè)學(xué)院《生物統(tǒng)計(jì)與應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 赤峰學(xué)院《教育史專題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 梧州學(xué)院《現(xiàn)代舞創(chuàng)編》2023-2024學(xué)年第二學(xué)期期末試卷
- 東北林業(yè)大學(xué)《生物科學(xué)專業(yè)英語》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西航空職業(yè)技術(shù)學(xué)院《攝影報(bào)道》2023-2024學(xué)年第二學(xué)期期末試卷
- 合肥共達(dá)職業(yè)技術(shù)學(xué)院《現(xiàn)代電子測量技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古工業(yè)大學(xué)《概率論與數(shù)據(jù)統(tǒng)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解
- 《環(huán)境污染對生態(tài)系統(tǒng)的影響》課件
- 機(jī)器狗:技術(shù)成熟性能優(yōu)越場景剛需放量在即2025
- 《教育強(qiáng)國建設(shè)規(guī)劃綱要(2024-2035年)》解讀-知識培訓(xùn)
- 《加油站安全管理培訓(xùn)課件》
- 《生態(tài)安全》課件
- 2025年春新人教版一年級下冊數(shù)學(xué)全冊教學(xué)課件
- 1.北京的春節(jié) 練習(xí)題(含答案)
- 年度得到 · 沈祖蕓全球教育報(bào)告(2024-2025)
- 抗震支架安裝工程施工方案范文
- GB/T 45071-2024自然保護(hù)地分類分級
評論
0/150
提交評論