shell流控【全國一等獎】_第1頁
shell流控【全國一等獎】_第2頁
shell流控【全國一等獎】_第3頁
shell流控【全國一等獎】_第4頁
shell流控【全國一等獎】_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

shell流控shell流程控制2任務(wù)01Shell流程控制任務(wù)02Shell案例學(xué)習(xí)目標3If條件語句For循環(huán)語句While條件循環(huán)語句Case條件語句其他語句1.Shell流程控制5條件語句(if)循環(huán)語句(for,while)選擇語句(case)shell的流程控制語句:Shell流程控制6if語句通過關(guān)系運算符判斷表達式的真假來決定執(zhí)行哪個分支。Shell有三種if...else語句:if...fi語句;if...else...fi語句;if...elif...else...fi語句if判斷語句Shell流程控制7(1)if語句語法格式:if[condition]thencommand1command2...

commandN

fi最后必須以fi來結(jié)尾閉合if,fi就是if倒過來拼寫。if[$(ps-ef|grep-c"ssh")-gt1];thenecho"true";ficondition和方括號[]之間必須有空格if判斷語句寫成一行(適用于終端命令提示符):Shell流程控制8當“條件成立”時執(zhí)行相應(yīng)的操作if

條件測試命令

then

命令序列fiif

磁盤已用空間>80%

then

報警fiif

條件測試命令命令序列…fi

結(jié)束判斷條件為真then條件為假Shell流程控制9應(yīng)用示例:如果/boot分區(qū)的空間使用超過80%,輸出報警信息#!/bin/bashRATE=`df-hT|grep"/boot"|awk'{print$6}'|cut-d"%"-f1`if[$RATE-gt80]thenecho"Warning,DISKisfull!"fiShell流程控制10當“條件成立”、“條件不成立”時執(zhí)行不同操作if

條件測試命令

then

命令序列1

else

命令序列2fiif3306端口是否在監(jiān)聽狀態(tài)

thenmysqld服務(wù)已運行

else

啟動mysqld服務(wù)fiif

條件測試命令命令序列1…條件為真then命令序列2…條件為假elsefi

結(jié)束判斷Shell流程控制11應(yīng)用示例:判斷mysqld是否在運行,若已運行則輸出提示信息,否則重新啟動mysqld服務(wù)#!/bin/bashservicemysqldstatus&>/dev/nullif[$?-eq0]

thenecho"mysqldserviceisrunning."else/etc/init.d/mysqldrestartfiShell流程控制12相當于if語句嵌套,針對多個條件執(zhí)行不同操作if

條件測試命令1;

then

命令序列1elif

條件測試命令2;

then

命令序列2elif...else

命令序列nfiif條件測試命令1命令序列1…條件為真then命令序列n…條件為假elseelif條件測試命令2命令序列2…條件為真then…………fi結(jié)束判斷Shell流程控制13根據(jù)變量的不同取值,重復(fù)執(zhí)行一組命令操作for

變量名in

取值列表do

命令序列done

for

收件人in

郵件地址列表do

發(fā)送郵件donefor變量=取值1取值1

取值ndone結(jié)束循環(huán)do命令序列…取值n已使用Shell流程控制14應(yīng)用示例1:依次輸出3條文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串[root@localhost~]#vishowday.sh#!/bin/bashforTMin"Morning""Noon""Evening"doecho"The$TMoftheday."done

[root@localhost~]#shshowday.shTheMorningoftheday.TheNoonoftheday.TheEveningoftheday驗證腳本執(zhí)行結(jié)果Shell流程控制15應(yīng)用示例2:對于使用“/bin/bash”作為登錄Shell的系統(tǒng)用戶,檢查他們在“/opt”目錄中擁有的子目錄或文件數(shù)量,如果超過100個,則列出具體個數(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的用戶名列表Shell流程控制16重復(fù)測試指定的條件,只要條件成立則反復(fù)執(zhí)行對應(yīng)的命令操作

while

命令或表達式

do

命令列表

done

while

可用內(nèi)存<100MB

do

獲取可用內(nèi)存數(shù)

donewhile條件測試命令條件為真條件為假done結(jié)束循環(huán)do命令序列…Shell流程控制17應(yīng)用示例1:批量添加20個系統(tǒng)用戶帳號,用戶名依次為“stu1”、“stu2”、……、“stu20”這些用戶的初始密碼均設(shè)置為“123456”#!/bin/bashi=1while[$i-le20]douseraddstu$iecho"123456"|passwd--stdinstu$i&>/dev/nulli=`expr$i+1`done

執(zhí)行l(wèi)eti++

也可以使變量i的值遞增1Shell流程控制18應(yīng)用示例2:批量刪除上例中添加的20個系統(tǒng)用戶帳號#!/bin/bashi=1while[$i-le20]douserdel-rstu$ii=`expr$i+1`done

Shell流程控制19根據(jù)變量的不同取值,分別執(zhí)行不同的命令操作case

變量值in

模式1)

命令序列1

;;

模式2)

命令序列2

;;

……

*)

默認執(zhí)行的命令序列esaccase變量=模式1esac結(jié)束分支命令序列1…;;有變量=模式2變量=其他值(*)默認命令序列………無是否否命令序列2…;;有無是Shell流程控制20應(yīng)用示例1:編寫腳本文件mydb.sh,用于控制系統(tǒng)服務(wù)mysqld當執(zhí)行./mydb.shstart時,啟動mysqld服務(wù)當執(zhí)行./mydb.shstop時,關(guān)閉mysqld服務(wù)如果輸入其他腳本參數(shù),則顯示幫助信息#!/bin/bash

case$1instart)echo"StartMySQLservice."

;;stop)echo"StopMySQLservice."

;;

*)echo"Usage:$0start|stop"

;;esacShell流程控制21應(yīng)用示例2:提示用戶從鍵盤輸入一個字符,判斷該字符是否為字母、數(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."esacShell流程控制22until語句根據(jù)條件執(zhí)行重復(fù)操作until

條件測試命令do

命令序列doneuntil條件測試命令條件為假條件為真done結(jié)束循環(huán)do命令序列…Shell流程控制23用于遷移位置變量,將$1~$9依次向左傳遞例如,若當前腳本程序獲得的位置變量如下:

$1=file1、$2=file2、$3=file3、$4=file4則執(zhí)行一次shift命令后,各位置變量為:

$1=file2、$2=file3、$3=file4再次執(zhí)行shift命令后,各位置變量為:

$1=file3、$2=file4Shell流程控制24應(yīng)用示例:通過命令行參數(shù)傳遞多個整數(shù)值,并計算總和[root@localhost~]#vishowday.sh#!/bin/bashResult=0while[$#-gt0]doResult=`expr$Result+$1`

shiftdoneecho"Thesumis:$Result"[root@localhost~]#./sumer.sh123456Thesumis:102驗證腳本執(zhí)行結(jié)果Shell流程控制25break語句在for、while、until等循環(huán)語句中,用于跳出當前所在的循環(huán)體,執(zhí)行循環(huán)體后的語句while命令do…………

break…………done……通常在循環(huán)體中與條件語句一起使用跳出循環(huán)Shell流程控制26continue在for、while、until等循環(huán)語句中,用于跳過循環(huán)體內(nèi)余下的語句,重新判斷條件以便執(zhí)行下一次循環(huán)whiledo…………

continue…………done……通常在循環(huán)體中與條件語句一起使用繼續(xù)下次循環(huán)Shell流程控制27exit命令同于退出shell,并返回給定值。在shell腳本中可以終止當前腳本執(zhí)行。執(zhí)行exit可使shell以指定的狀態(tài)值退出。若不設(shè)置狀態(tài)值參數(shù),則shell以預(yù)設(shè)值退出。狀態(tài)值0代表執(zhí)行成功,其他值代表執(zhí)行失敗。

語法exit(參數(shù))

參數(shù)返回值:指定shell返回值。Shell流程控制28

實例退出當前shell:在腳本中,進入腳本所在目錄,否則退出:在腳本中,判斷參數(shù)數(shù)量,不匹配就打印使用方式,退出:

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論