![linux網(wǎng)絡(luò)操作系統(tǒng)管理項(xiàng)目學(xué)習(xí)shell script_第1頁(yè)](http://file4.renrendoc.com/view/ed03eda95272b6843f2318a206eaae0c/ed03eda95272b6843f2318a206eaae0c1.gif)
![linux網(wǎng)絡(luò)操作系統(tǒng)管理項(xiàng)目學(xué)習(xí)shell script_第2頁(yè)](http://file4.renrendoc.com/view/ed03eda95272b6843f2318a206eaae0c/ed03eda95272b6843f2318a206eaae0c2.gif)
![linux網(wǎng)絡(luò)操作系統(tǒng)管理項(xiàng)目學(xué)習(xí)shell script_第3頁(yè)](http://file4.renrendoc.com/view/ed03eda95272b6843f2318a206eaae0c/ed03eda95272b6843f2318a206eaae0c3.gif)
![linux網(wǎng)絡(luò)操作系統(tǒng)管理項(xiàng)目學(xué)習(xí)shell script_第4頁(yè)](http://file4.renrendoc.com/view/ed03eda95272b6843f2318a206eaae0c/ed03eda95272b6843f2318a206eaae0c4.gif)
![linux網(wǎng)絡(luò)操作系統(tǒng)管理項(xiàng)目學(xué)習(xí)shell script_第5頁(yè)](http://file4.renrendoc.com/view/ed03eda95272b6843f2318a206eaae0c/ed03eda95272b6843f2318a206eaae0c5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux網(wǎng)絡(luò)操作系統(tǒng)及應(yīng)用教程(項(xiàng)目式)項(xiàng)目八學(xué)習(xí)shellscript
項(xiàng)目導(dǎo)入:如果想要管理好屬于你的主機(jī),那么一定要好好學(xué)習(xí)shellscript。shellscript有點(diǎn)像是早期的批處理,即將一些命令匯總起來(lái)一次運(yùn)行。但是Shellscript擁有更強(qiáng)大的功能,那就是它可以進(jìn)行類(lèi)似程序(program)的撰寫(xiě),并且不需要經(jīng)過(guò)編譯(compile)就能夠運(yùn)行,非常方便。同時(shí),我們還可以通過(guò)shellscript來(lái)簡(jiǎn)化我們?nèi)粘5墓ぷ鞴芾怼T谡麄€(gè)Linux的環(huán)境中,一些服務(wù)(service)的啟動(dòng)都是通過(guò)shellscript來(lái)運(yùn)行的,如果你對(duì)于script不了解,一旦發(fā)生問(wèn)題,可真是會(huì)求助無(wú)門(mén)?。?/p>
職業(yè)能力目標(biāo)和要求:
理解shellscript。
掌握判斷式的用法。
掌握條件判斷式的用法。
掌握循環(huán)的用法。項(xiàng)目八學(xué)習(xí)shellscript
1.
了解shellscript
2.練習(xí)簡(jiǎn)單的shellscript
3.用好判斷式
4.使用條件判斷式
7.項(xiàng)目實(shí)錄
5.使用循環(huán)(loop)
6.對(duì)shellscript進(jìn)行追蹤與調(diào)試8.1任務(wù)1了解shellscript
1.了解shellscript
2.編寫(xiě)與執(zhí)行一個(gè)shellscript
3.養(yǎng)成撰寫(xiě)shellscript的良好習(xí)慣子任務(wù)1了解shellscript簡(jiǎn)單地說(shuō),shellscript就像是早期DOS年代的批處理(.bat),最簡(jiǎn)單的功能就是將許多命令寫(xiě)在一起,讓使用者很輕易地就能夠一下子處理復(fù)雜的操作(運(yùn)行一個(gè)文件“shellscript”,就能夠一次運(yùn)行多個(gè)命令)。而且shellscript更提供數(shù)組、循環(huán)、條件與邏輯判斷等重要功能,讓用戶(hù)也可以直接以shell來(lái)撰寫(xiě)程序,而不必使用類(lèi)似C程序語(yǔ)言等傳統(tǒng)程序撰寫(xiě)的語(yǔ)法。子任務(wù)2編寫(xiě)與執(zhí)行一個(gè)shellscript子任務(wù)2編寫(xiě)與執(zhí)行一個(gè)shellscript子任務(wù)2編寫(xiě)與執(zhí)行一個(gè)shellscript子任務(wù)2編寫(xiě)與執(zhí)行一個(gè)shellscript子任務(wù)3養(yǎng)成撰寫(xiě)shellscript的良好習(xí)慣建議一定要養(yǎng)成良好的script撰寫(xiě)習(xí)慣,在每個(gè)script的文件頭處包含如下內(nèi)容:script的功能;script的版本信息;script的作者與聯(lián)絡(luò)方式;script的版權(quán)聲明方式;script的History(歷史記錄);script內(nèi)較特殊的命令,使用“絕對(duì)路徑”的方式來(lái)執(zhí)行;script運(yùn)行時(shí)需要的環(huán)境變量預(yù)先聲明與設(shè)置。8.2任務(wù)2練習(xí)簡(jiǎn)單的shellscript
1.完成簡(jiǎn)單范例
2.了解腳本的運(yùn)行方式的差異8.2.1子任務(wù)1完成簡(jiǎn)單范例子任務(wù)1完成簡(jiǎn)單范例子任務(wù)1完成簡(jiǎn)單范例子任務(wù)2了解腳本的運(yùn)行方式的差異1.利用直接運(yùn)行的方式來(lái)運(yùn)行腳本子任務(wù)2了解腳本的運(yùn)行方式的差異1.利用直接運(yùn)行的方式來(lái)運(yùn)行腳本子任務(wù)2了解腳本的運(yùn)行方式的差異2.利用source運(yùn)行腳本:在父程序中運(yùn)行子任務(wù)2了解腳本的運(yùn)行方式的差異2.利用source運(yùn)行腳本:在父程序中運(yùn)行8.3任務(wù)3用好判斷式子任務(wù)1利用test命令的測(cè)試功能[root@wwwscripts]#vimsh05.sh#!/bin/bash#Program:# Userinputafilename,programwillchecktheflowing:# 1.)exist?2.)file/directory?3.)filepermissions#History:#2012/08/25 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
#讓使用者輸入文件名,并且判斷使用者是否輸入了字符串echo-e"Pleaseinputafilename,Iwillcheckthefilename'stypeand\permission.\n\n"read-p"Inputafilename:"filenametest-z$filename&&echo"YouMUSTinputafilename."&&exit08.3任務(wù)3用好判斷式子任務(wù)1利用test命令的測(cè)試功能#判斷文件是否存在,若不存在則顯示信息并結(jié)束腳本test!-e$filename&&echo"Thefilename'$filename'DONOTexist"&&exit0#開(kāi)始判斷文件類(lèi)型與屬性test-f$filename&&filetype="regularefile"test-d$filename&&filetype="directory"test-r$filename&&perm="readable"test-w$filename&&perm="$permwritable"test-x$filename&&perm="$permexecutable"#開(kāi)始輸出信息echo"Thefilename:$filenameisa$filetype"echo"Andthepermissionsare:$perm"8.3任務(wù)3用好判斷式子任務(wù)2利用判斷符號(hào)[]分析:需要利用中括號(hào)、&&與||。[root@wwwscripts]#vish06.sh#!/bin/bash#Program:# Thisprogramshowstheuser'schoice#History:#2012/08/25 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
read-p"Pleaseinput(Y/N):"yn["$yn"=="Y"-o"$yn"=="y"]&&echo"OK,continue"&&exit0["$yn"=="N"-o"$yn"=="n"]&&echo"Oh,interrupt!"&&exit0echo"Idon'tknowwhatyourchoiceis"&&exit08.3任務(wù)3用好判斷式子任務(wù)3使用Shellscript的默認(rèn)變量($0,$1...)那么,script是怎么實(shí)現(xiàn)這個(gè)功能的呢?其實(shí)script針對(duì)參數(shù)已經(jīng)設(shè)置好了一些變量名稱(chēng)。對(duì)應(yīng)如下:/path/to/scriptnameopt1opt2opt3opt4$0$1$2$3$48.3任務(wù)3用好判斷式子任務(wù)3使用Shellscript的默認(rèn)變量($0,$1...)[root@wwwscripts]#vimsh07.sh#!/bin/bash#Program:# Programshowsthescriptname,parameters...#History:#2012/02/17 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
echo"Thescriptnameis==>$0"echo"Totalparameternumberis==>$#"["$#"-lt2]&&echo"Thenumberofparameterislessthan2.Stophere."\ &&exit0echo"Yourwholeparameteris==>'$@'"echo"The1stparameter==>$1"echo"The2ndparameter==>$2"8.3任務(wù)3用好判斷式子任務(wù)3使用Shellscript的默認(rèn)變量($0,$1...)運(yùn)行結(jié)果如下:[root@wwwscripts]#shsh07.shtheonehahaquotThescriptnameis==>sh07.sh<==文件名Totalparameternumberis==>3<==果然有三個(gè)參數(shù)Yourwholeparameteris==>'theonehahaquot'<==參數(shù)的全部?jī)?nèi)容The1stparameter==>theone<==第一個(gè)參數(shù)The2ndparameter==>haha<==第二個(gè)參數(shù)8.3任務(wù)3用好判斷式子任務(wù)4shift:造成參數(shù)變量號(hào)碼偏移[root@wwwscripts]#vish08.sh#!/bin/bash#Program:# Programshowstheeffectofshiftfunction.#History:#2012/02/17 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
echo"Totalparameternumberis==>$#"echo"Yourwholeparameteris==>'$@'"shift#進(jìn)行第一次“一個(gè)變量的偏移”echo"Totalparameternumberis==>$#"echo"Yourwholeparameteris==>'$@'"shift3#進(jìn)行第二次“三個(gè)變量的偏移”echo"Totalparameternumberis==>$#"echo"Yourwholeparameteris==>'$@'"8.3任務(wù)3用好判斷式子任務(wù)4shift:造成參數(shù)變量號(hào)碼偏移運(yùn)行結(jié)果如下:[root@wwwscripts]#shsh08.shonetwothreefourfivesix<==給定六個(gè)參數(shù)Totalparameternumberis==>6<==最原始的參數(shù)變量情況Yourwholeparameteris==>'onetwothreefourfivesix'Totalparameternumberis==>5<==第一次偏移,觀察下面,發(fā)現(xiàn)第一個(gè)one不見(jiàn)了Yourwholeparameteris==>'twothreefourfivesix'Totalparameternumberis==>2<==第二次偏移掉三個(gè),twothreefour不見(jiàn)了Yourwholeparameteris==>'fivesix'8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then1.單層、簡(jiǎn)單條件判斷式如果你只有一個(gè)判斷式要進(jìn)行,那么我們可以簡(jiǎn)單地這樣做:if[條件判斷式];then
當(dāng)條件判斷式成立時(shí),可以進(jìn)行的命令工作內(nèi)容;fi<==將if反過(guò)來(lái)寫(xiě),就成為fi了!結(jié)束if之意!&&代表AND;||代表or。8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then[root@wwwscripts]#cpsh06.shsh06-2.sh<==這樣改得比較快[root@wwwscripts]#vimsh06-2.sh#!/bin/bash#Program:#Thisprogramshowstheuser'schoice#History:#2012/08/25BobbyFirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
read-p"Pleaseinput(Y/N):"yn
if["$yn"=="Y"]||["$yn"=="y"];then echo"OK,continue" exit0fiif["$yn"=="N"]||["$yn"=="n"];then echo"Oh,interrupt!" exit0fiecho"Idon'tknowwhatyourchoiceis"&&exit08.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then2.多重、復(fù)雜條件判斷式#一個(gè)條件判斷,分成功進(jìn)行與失敗進(jìn)行(else)if[條件判斷式];then
當(dāng)條件判斷式成立時(shí),可以進(jìn)行的命令工作內(nèi)容;else
當(dāng)條件判斷式不成立時(shí),可以進(jìn)行的命令工作內(nèi)容;fi8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then2.多重、復(fù)雜條件判斷式如果考慮更復(fù)雜的情況,則可以使用:#多個(gè)條件判斷(if…elif…elif…else)分多種不同情況運(yùn)行if[條件判斷式一];then
當(dāng)條件判斷式一成立時(shí),可以進(jìn)行的命令工作內(nèi)容;elif[條件判斷式二];then
當(dāng)條件判斷式二成立時(shí),可以進(jìn)行的命令工作內(nèi)容;else
當(dāng)條件判斷式一與二均不成立時(shí),可以進(jìn)行的命令工作內(nèi)容;fi8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then[root@wwwscripts]#cpsh06-2.shsh06-3.sh[root@wwwscripts]#vish06-3.sh#!/bin/bash#Program:#Thisprogramshowstheuser'schoice#History:#2012/08/25BobbyFirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
read-p"Pleaseinput(Y/N):"yn
if["$yn"=="Y"]||["$yn"=="y"];then echo"OK,continue"elif["$yn"=="N"]||["$yn"=="n"];then echo"Oh,interrupt!"else echo"Idon'tknowwhatyourchoiceis"fi8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then[root@wwwscripts]#vimsh09.sh#!/bin/bash#Program:# Check$1isequalto"hello"#History:#2012/08/28 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
if["$1"=="hello"];then echo"Hello,howareyou?"elif["$1"==""];then echo"YouMUSTinputparameters,ex>{$0someword}"else echo"Theonlyparameteris'hello',ex>{$0hello}"fi8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then[root@www~]#netstat-tulnActiveInternetconnections(onlyservers)ProtoRecv-QSend-QLocalAddressForeignAddressStatetcp00:111:*LISTENtcp00:631:*LISTENtcp00:25:*LISTENtcp00:::22:::*LISTENudp00:111:*udp00:631:*#封包格式
本地IP:端口
遠(yuǎn)程IP:端口
是否監(jiān)聽(tīng)8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then[root@wwwscripts]#vimsh10.sh#!/bin/bash#Program:# UsingnetstatandgreptodetectWWW,SSH,FTPandMailservices.#History:#2012/08/28 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
#先做一些告訴的動(dòng)作echo"Now,IwilldetectyourLinuxserver'sservices!"echo-e"Thewww,ftp,ssh,andmailwillbedetect!\n"8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then#開(kāi)始進(jìn)行一些測(cè)試的工作,并且也輸出一些信息testing=$(netstat-tuln|grep":80")#檢測(cè)port80存在否if["$testing"!=""];then echo"WWWisrunninginyoursystem."fitesting=$(netstat-tuln|grep":22")#檢測(cè)port22存在否if["$testing"!=""];then echo"SSHisrunninginyoursystem."fitesting=$(netstat-tuln|grep":21")#檢測(cè)port21存在否if["$testing"!=""];then echo"FTPisrunninginyoursystem."fitesting=$(netstat-tuln|grep":25")#檢測(cè)port25存在否if["$testing"!=""];then echo"Mailisrunninginyoursystem."fi8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then這個(gè)程序可以幫你計(jì)算退伍日期。如果是已經(jīng)退伍的朋友,還可以知道已經(jīng)退伍多久了。[root@wwwscripts]#vimsh11.sh#!/bin/bash#Program:# Youinputyourdemobilizationdate,Icalculatehowmanydays# beforeyoudemobilize.#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH7.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then#告訴使用者這個(gè)程序的用途,并且告訴應(yīng)該如何輸入日期格式echo"Thisprogramwilltrytocalculate:"echo"Howmanydaysbeforeyourdemobilizationdate..."read-p"Pleaseinputyourdemobilizationdate(YYYYMMDDex>20120401):"date2
#利用正則表達(dá)式測(cè)試一下這個(gè)輸入的內(nèi)容是否正確,
date_d=$(echo$date2|grep'[0-9]\{8\}')#看看是否有8個(gè)數(shù)字if["$date_d"==""];then echo"Youinputthewrongdateformat...." exit1fi
8.4任務(wù)4使用條件判斷式子任務(wù)1利用if…then#開(kāi)始計(jì)算日期declare-idate_dem=`date--date="$date2"+%s` #退伍日期秒數(shù),注意+前面的空格declare-idate_now=`date+%s` #現(xiàn)在日期秒數(shù),注意+前面的空格declare-idate_total_s=$(($date_dem-$date_now)) #剩余秒數(shù)統(tǒng)計(jì)declare-idate_d=$(($date_total_s/60/60/24))#轉(zhuǎn)為日數(shù),用除法(一天=24*60*60(秒))if["$date_total_s"-lt"0"];then #判斷是否已退伍 echo"Youhadbeendemobilizationbefore:"$((-1*$date_d))"ago"else declare-idate_h=$(($(($date_total_s-$date_d*60*60*24))/60/60)) echo"Youwilldemobilizeafter$date_ddaysand$date_hhours."fi8.4任務(wù)4使用條件判斷式子任務(wù)2利用case…esac判斷case$變量名稱(chēng)in <==關(guān)鍵字為case,變量前有$符"第一個(gè)變量?jī)?nèi)容") <==每個(gè)變量?jī)?nèi)容建議用雙引號(hào)括起來(lái),關(guān)鍵字則為小括號(hào))
程序段 ;; <==每個(gè)類(lèi)別結(jié)尾使用兩個(gè)連續(xù)的分號(hào)來(lái)處理"第二個(gè)變量?jī)?nèi)容")
程序段 ;;*) <==最后一個(gè)變量?jī)?nèi)容都會(huì)用*來(lái)代表所有其他值
不包含第一個(gè)變量?jī)?nèi)容與第二個(gè)變量?jī)?nèi)容的其他程序運(yùn)行段 exit1 ;;esac <==最終的case結(jié)尾!思考一下case反過(guò)來(lái)寫(xiě)是什么8.4任務(wù)4使用條件判斷式子任務(wù)2利用case…esac判斷[root@wwwscripts]#vimsh09-2.sh#!/bin/bash#Program:# Show"Hello"from$1....byusingcase....esac#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
case$1in"hello")
echo"Hello,howareyou?" ;;"") echo"YouMUSTinputparameters,ex>{$0someword}" ;;*)#其實(shí)就相當(dāng)于通配符,0~無(wú)窮多個(gè)任意字符之意
echo"Usage$0{hello}" ;;esac7.4任務(wù)4使用條件判斷式子任務(wù)2利用case…esac判斷[root@wwwscripts]#vimsh09-2.sh#!/bin/bash#Program:# Show"Hello"from$1....byusingcase....esac#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
case$1in"hello")
echo"Hello,howareyou?" ;;"") echo"YouMUSTinputparameters,ex>{$0someword}" ;;*)#其實(shí)就相當(dāng)于通配符,0~無(wú)窮多個(gè)任意字符之意
echo"Usage$0{hello}" ;;esac7.4任務(wù)4使用條件判斷式子任務(wù)2利用case…esac判斷下面以一個(gè)例子來(lái)進(jìn)一步說(shuō)明:讓用戶(hù)能夠輸入one、two、three,并且將用戶(hù)的變量顯示到屏幕上,如果不是one、two、three時(shí),就告訴用戶(hù)僅有這三種選擇。[root@wwwscripts]#vimsh12.sh#!/bin/bash#Program:# Thisscriptonlyacceptstheflowingparameter:one,twoorthree.#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
echo"Thisprogramwillprintyourselection!"8.4任務(wù)4使用條件判斷式子任務(wù)2利用case…esac判斷#read-p"Inputyourchoice:"choice #暫時(shí)取消,可以替換#case$choicein#暫時(shí)取消,可以替換case$1in#現(xiàn)在使用,可以用上面兩行替換"one") echo"YourchoiceisONE" ;;"two") echo"YourchoiceisTWO" ;;"three") echo"YourchoiceisTHREE" ;;*) echo"Usage$0{one|two|three}" ;;esac8.4任務(wù)4使用條件判斷式子任務(wù)3利用function功能我們將sh12.sh改寫(xiě)一下,自定義一個(gè)名為printit的函數(shù):[root@wwwscripts]#vimsh12-2.sh#!/bin/bash#Program:# Usefunctiontorepeatinformation.#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH8.4任務(wù)4使用條件判斷式子任務(wù)3利用function功能functionprintit(){ echo-n"Yourchoiceis"#加上-n可以不斷行繼續(xù)在同一行顯示}
echo"Thisprogramwillprintyourselection!"case$1in"one") printit;echo$1|tr'a-z''A-Z'#將參數(shù)做大小寫(xiě)轉(zhuǎn)換 ;;"two") printit;echo$1|tr'a-z''A-Z' ;;"three") printit;echo$1|tr'a-z''A-Z' ;;*) echo"Usage$0{one|two|three}" ;;esac8.4任務(wù)4使用條件判斷式子任務(wù)3利用function功能我們將上面的例子再次改寫(xiě)一下:[root@wwwscripts]#vimsh12-3.sh#!/bin/bash#Program:# Usefunctiontorepeatinformation.#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH8.4任務(wù)4使用條件判斷式子任務(wù)3利用function功能functionprintit(){ echo"Yourchoiceis$1"#這個(gè)$1必須參考下面命令的執(zhí)行}
echo"Thisprogramwillprintyourselection!"case$1in"one") printit1 #請(qǐng)注意,printit命令后面還有參數(shù) ;;"two") printit2 ;;"three") printit3 ;;*) echo"Usage$0{one|two|three}" ;;esac8.5任務(wù)5使用循環(huán)(loop)
1.
whiledodone,untildodone(不定循環(huán))
2.for…do…done(固定循環(huán))
3.for…do…done的數(shù)值處理8.5任務(wù)5使用循環(huán)(loop)8.5.1子任務(wù)1whiledodone,untildodone(不定循環(huán))一般來(lái)說(shuō),不定循環(huán)最常見(jiàn)的就是底下這兩種狀態(tài)了。while[condition] <==中括號(hào)內(nèi)的狀態(tài)就是判斷式do <==do是循環(huán)的開(kāi)始!
程序段落done <==done是循環(huán)的結(jié)束8.5任務(wù)5使用循環(huán)(loop)8.5.1子任務(wù)1whiledodone,untildodone(不定循環(huán))while的中文是“當(dāng)....時(shí)”,所以,這種方式說(shuō)的是“當(dāng)condition條件成立時(shí),就進(jìn)行循環(huán),直到condition的條件不成立才停止”的意思。還有另外一種不定循環(huán)的方式:until[condition]do
程序段落done8.5任務(wù)5使用循環(huán)(loop)8.5.1子任務(wù)1whiledodone,untildodone(不定循環(huán))[root@wwwscripts]#vimsh13.sh#!/bin/bash#Program:# Repeatquestionuntiluserinputcorrectanswer.#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
while["$yn"!="yes"-a"$yn"!="YES"]do read-p"Pleaseinputyes/YEStostopthisprogram:"yndoneecho"OK!youinputthecorrectanswer."8.5任務(wù)5使用循環(huán)(loop)8.5.1子任務(wù)1whiledodone,untildodone(不定循環(huán))那如果使用until呢?[root@wwwscripts]#vimsh13-2.sh#!/bin/bash#Program:# Repeatquestionuntiluserinputcorrectanswer.#History:#2005/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
until["$yn"=="yes"-o"$yn"=="YES"]do read-p"Pleaseinputyes/YEStostopthisprogram:"yndoneecho"OK!youinputthecorrectanswer."8.5任務(wù)5使用循環(huán)(loop)8.5.1子任務(wù)1whiledodone,untildodone(不定循環(huán))如果想要計(jì)算1+2+3+....+100的值。利用循環(huán),可以這樣寫(xiě)程序:[root@wwwscripts]#vimsh14.sh#!/bin/bash#Program:# Uselooptocalculate"1+2+3+...+100"result.#History:#2005/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
s=0 #這是累加的數(shù)值變量i=0 #這是累計(jì)的數(shù)值,即1,2,3....while["$i"!="100"]do i=$(($i+1)) #每次i都會(huì)添加1 s=$(($s+$i)) #每次都會(huì)累加一次doneecho"Theresultof'1+2+3+...+100'is==>$s"8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))如果想要計(jì)算1+2+3+....+100的值。利用循環(huán),可以這樣寫(xiě)程序:[root@wwwscripts]#vimsh14.sh#!/bin/bash#Program:# Uselooptocalculate"1+2+3+...+100"result.#History:#2005/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
s=0 #這是累加的數(shù)值變量i=0 #這是累計(jì)的數(shù)值,即1,2,3....while["$i"!="100"]do i=$(($i+1)) #每次i都會(huì)添加1 s=$(($s+$i)) #每次都會(huì)累加一次doneecho"Theresultof'1+2+3+...+100'is==>$s"8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))while、until的循環(huán)方式必須要符合某個(gè)條件的狀態(tài),而for這種語(yǔ)法則是已經(jīng)知道要進(jìn)行幾次循環(huán)的狀態(tài)。語(yǔ)法如下所示:forvarincon1con2con3...do
程序段done8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))假設(shè)有三種動(dòng)物,分別是dog、cat、elephant,如果每一行都按“Therearedogs...”之類(lèi)的樣式輸出,則可以如此撰寫(xiě)程序:[root@wwwscripts]#vimsh15.sh#!/bin/bash#Program:# Usingfor....looptoprint3animals#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
foranimalindogcatelephantdo echo"Thereare${animal}s...."done8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))程序如下:[root@wwwscripts]#vimsh16.sh#!/bin/bash#Program#Useid,fingercommandtochecksystemaccount'sinformation.#History#2012/02/18BobbyfirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATHusers=$(cut-d':'-f1/etc/passwd) #獲取賬號(hào)名稱(chēng)forusernamein$users #開(kāi)始循環(huán)doid$usernamefinger$usernamedone8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))舉例來(lái)說(shuō),我想要利用ping這個(gè)可以判斷網(wǎng)絡(luò)狀態(tài)的命令來(lái)進(jìn)行網(wǎng)絡(luò)狀態(tài)的實(shí)際檢測(cè),要偵測(cè)的域是本機(jī)所在的~00。由于有100臺(tái)主機(jī),總不會(huì)要我在for后面輸入1到100吧?此時(shí)可以這樣撰寫(xiě)程序:[root@wwwscripts]#vimsh17.sh#!/bin/bash#Program#Usepingcommandtocheckthenetwork'sPCstate.#History#2012/02/18BobbyfirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATHnetwork="192.168.1"#先定義一個(gè)網(wǎng)絡(luò)號(hào)(網(wǎng)絡(luò)ID)8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))forsitenuin$(seq1100) #seq為sequence(連續(xù))的縮寫(xiě)之意do #下面的語(yǔ)句取得ping的回傳值是正確的還是失敗的ping-c1-w1${network}.${sitenu}&>/dev/null&&result=0||result=1 #開(kāi)始顯示結(jié)果是正確的啟動(dòng)(UP)還是錯(cuò)誤的沒(méi)有連通(DOWN)if["$result"==0];thenecho"Server${network}.${sitenu}isUP."elseecho"Server${network}.${sitenu}isDOWN."fidone8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))如果想要讓用戶(hù)輸入某個(gè)目錄名,然后找出某目錄內(nèi)的文件的權(quán)限,該如何做呢?程序如下:[root@wwwscripts]#vimsh18.sh#!/bin/bash#Program:# Userinputdirname,Ifindthepermissionoffiles.#History:#2012/08/29 Bobby FirstreleasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
8.5任務(wù)5使用循環(huán)(loop)8.5.2子任務(wù)2for…do…done(固定循環(huán))#先看看這個(gè)目錄是否存在啊read-p"Pleaseinputadirectory:"dirif["$dir"==""-o!-d"$dir"];then echo"The$dirisNOTexistinyoursystem." exit1fi
#開(kāi)始測(cè)試文件filelist=$(ls$dir) #列出所有在該目錄下的文件名稱(chēng)forfilenamein$filelistdo perm="" test-r"$dir/$filename"&&perm="$permreadable" test-w"$dir/$filename"&&perm="$perm
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)營(yíng)酒吧合同
- 股份制改革流程文書(shū)模板與指導(dǎo)
- 汽車(chē)美容店合作協(xié)議書(shū)年
- 委托培訓(xùn)協(xié)議書(shū)
- 質(zhì)量管理體系培訓(xùn)指導(dǎo)書(shū)
- 2025年青海貨運(yùn)從業(yè)資證孝試模似題庫(kù)
- 小學(xué)三年級(jí)數(shù)學(xué)加減乘除混合口算
- 2025年黔東南道路貨運(yùn)駕駛員從業(yè)資格證考試題庫(kù)
- 2025年上海貨車(chē)叢業(yè)資格證考試題
- 2025年汕頭貨運(yùn)從業(yè)資格證怎么考試
- 《環(huán)境管理學(xué)》教案
- 2025年蛇年年度營(yíng)銷(xiāo)日歷營(yíng)銷(xiāo)建議【2025營(yíng)銷(xiāo)日歷】
- (一模)寧波市2024學(xué)年第一學(xué)期高考模擬考試 數(shù)學(xué)試卷(含答案)
- 攝影入門(mén)課程-攝影基礎(chǔ)與技巧全面解析
- 冀少版小學(xué)二年級(jí)下冊(cè)音樂(lè)教案
- 【龍集鎮(zhèn)稻蝦綜合種養(yǎng)面臨的問(wèn)題及優(yōu)化建議探析(論文)13000字】
- 父母贈(zèng)與子女農(nóng)村土地協(xié)議書(shū)范本
- 《師范硬筆書(shū)法教程(第2版)》全套教學(xué)課件
- 中國(guó)聯(lián)通H248技術(shù)規(guī)范
- 集團(tuán)母子公司協(xié)議書(shū)
- 孫權(quán)勸學(xué)省公共課一等獎(jiǎng)全國(guó)賽課獲獎(jiǎng)?wù)n件
評(píng)論
0/150
提交評(píng)論