OS教學(xué)課件:2-Shell 編程_第1頁(yè)
OS教學(xué)課件:2-Shell 編程_第2頁(yè)
OS教學(xué)課件:2-Shell 編程_第3頁(yè)
OS教學(xué)課件:2-Shell 編程_第4頁(yè)
OS教學(xué)課件:2-Shell 編程_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Linux課堂Shell編程本次課程內(nèi)容正則表達(dá)式Shell簡(jiǎn)介特殊變量Shell編程使用Crontab正則表達(dá)式正則表達(dá)式(regularexpression)就是用一個(gè)“字符串”來(lái)描述一個(gè)特征,然后去驗(yàn)證另一個(gè)“字符串”是否符合這個(gè)特征正則表達(dá)式基礎(chǔ)最簡(jiǎn)單的,假設(shè)搜索包含cat的字符,也就是正則表達(dá)式是“cat”,如果大小寫不敏感,那么句點(diǎn),代表任意一字符,比如正則表達(dá)式是"c.t",那么將匹配cat,cut,ckt,c#t,c!t這些中括號(hào),為了解決句點(diǎn)符號(hào)匹配范圍過于廣泛這一問題,你可以在方括號(hào)(“[]”)里面指定看來(lái)有意義的字符。比如正則表達(dá)式是t[aeio]n,那么只能匹配tan,ten,tin,ton這些或符號(hào),比如t(a|e|i|o|oo)n,匹配tan,ten,tin,ton,toon這些匹配次數(shù)的符號(hào)思考:假設(shè)我們要在文本文件中搜索美國(guó)的社會(huì)安全號(hào)碼。這個(gè)號(hào)碼的格式是999-99-9999。正則表達(dá)式怎么寫?否符號(hào)“^”符號(hào)稱為“否”符號(hào)。如果用在方括號(hào)內(nèi),“^”表示不想要匹配的字符。例如,圖的正則表達(dá)式匹配所有單詞,但以“X”字母開頭的單詞除外。其他符號(hào)圓括號(hào)和空白符號(hào)假設(shè)要從格式為“June26,1951”的生日日期中提取出月份部分,用來(lái)匹配該日期的正則表達(dá)式可以:/[a-zA-Z]\{3,}\s\d\{1,2},\s\d\{4}課堂練習(xí)測(cè)試一個(gè)email地址,校驗(yàn)其是否正確測(cè)試一個(gè)身份證號(hào)碼測(cè)試一個(gè)手機(jī)號(hào)cut命令cut是以每一行為一個(gè)處理對(duì)象的,這種機(jī)制和sed是一樣的。cut命令主要是接受三個(gè)定位方法:第一,字節(jié)(bytes),用選項(xiàng)-b第二,字符(characters),用選項(xiàng)-c第三,域(fields),用選項(xiàng)-fcut舉例[rocrocket@rocrocketprogramming]$who|cut-b3[rocrocket@rocrocketprogramming]$who|cut-b3-5,8其他幾個(gè)文本命令tee命令結(jié)果保存到某一文件并輸出到屏幕tr命令把一個(gè)字符轉(zhuǎn)換成另一個(gè)字符tr-c-d-s[“str1_translate_from”][“str2_translate_to”]<input-file

-c用字符串1中字符集的補(bǔ)集替換此字符集,要求字符集為ASCII。

-d刪除字符串1中所有輸入字符。

-s刪除所有連續(xù)重復(fù)出現(xiàn)字符序列,只保留第一個(gè)。

input-file是轉(zhuǎn)換文件名。雖然可以使用其他格式輸入,但這種格式最常用。awk命令它幾乎可以完成

grep和sed所能完成的全部工作,同時(shí),它還可以進(jìn)行樣式裝入、流控制、數(shù)學(xué)運(yùn)算符、進(jìn)程控制語(yǔ)句甚至于內(nèi)置的變量和函數(shù)。它具備了一個(gè)完整的語(yǔ)言所應(yīng)具有的幾乎所有精美特性。實(shí)際上,awk的確擁有自己的語(yǔ)言:awk程序設(shè)計(jì)語(yǔ)言,awk的三位創(chuàng)建者已將它正式定義為:樣式掃描和處理語(yǔ)言。awk用法:awk

[

-F

re]

[parameter...]

['prog']

[-f

progfile][in_file...]awk舉例echo"a|b|c|d|e"|awk-F"|"'{print$1$3$5}‘a(chǎn)wk-F":"'{print$1"\t\t"$4}'/etc/passwd|grep'1003'sed命令sed是一種在線編輯器,它一次處理一行內(nèi)容。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中,稱為“模式空間”(patternspace),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲(chǔ)輸出。Sed主要用來(lái)自動(dòng)編輯一個(gè)或多個(gè)文件;簡(jiǎn)化對(duì)文件的反復(fù)操作;編寫轉(zhuǎn)換程序等。Sed命令調(diào)用sed命令有兩種形式:sed[options]'command'file(s)sed[options]-fscriptfilefile(s)#sed'1d'ab#刪除第一行#sed'2,$d'ab#刪除第二行到最后一行#sed-n'1,2p'ab#顯示第一行到第二行#sed-n'/ruby/p'ab#查詢包括關(guān)鍵字ruby所在所有行#sed'1adrinktea'ab#第一行后增加字符串"drinktea"

#sed'1cHi'ab#第一行代替為HiShell簡(jiǎn)介Shell俗稱殼(用來(lái)區(qū)別于核),是指“提供使用者使用界面”的軟件(命令解析器),作為程序設(shè)計(jì)語(yǔ)言,它定義了各種變量和參數(shù),并提供了許多在高級(jí)語(yǔ)言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。分類:BourneShell,CShell,KornShell,BourneAgainShell(bash)Shell特殊變量變量 含義$0 腳本名字$1 位置參數(shù)#1$2-$9 位置參數(shù)#2-#9${10} 位置參數(shù)#10$# 位置參數(shù)的個(gè)數(shù)"$*" 所有的位置參數(shù)(作為單個(gè)字符串)*"$@" 所有的位置參數(shù)(每個(gè)都作為獨(dú)立的字符串)${#*} 傳遞到腳本中的命令行參數(shù)的個(gè)數(shù)${#@} 傳遞到腳本中的命令行參數(shù)的個(gè)數(shù)$? 返回值$$ 腳本的進(jìn)程ID(PID)$- 傳遞到腳本中的標(biāo)志(使用set)$_ 之前命令的最后一個(gè)參數(shù)$! 運(yùn)行在后臺(tái)的最后一個(gè)作業(yè)的進(jìn)程ID(PID)*必須被引用起來(lái),否則默認(rèn)為"$@".特殊變量$RANDOM產(chǎn)生一個(gè)隨機(jī)整數(shù),范圍在0-32767產(chǎn)生指定范圍內(nèi)的隨機(jī)數(shù)rnumber=$(((RANDOM%(max-min+divisibleBy))/divisibleBy*divisibleBy+min))/dev/null隨機(jī)字符串如何獲取隨機(jī)字符串:/dev/urandom隨機(jī)設(shè)備產(chǎn)生一連串字符/usr/bin/md5sumMD5轉(zhuǎn)換/bin/cut字符串切割head-1/dev/urandom|md5sumecho$var1|cut-b起始位置-結(jié)束位置特殊字符#這是一行注釋(#!/bin/sh例外);命令分割符.等同于source(bash的內(nèi)建命令)""雙引號(hào),部分引用''單引號(hào),全部引用:表示空命令,什么都不做變量賦值a=375;hello=$a;#注意,=兩邊不能有空格,如果有,代表啥意思?VARIABLE=value;腳本認(rèn)為VARIABLE是一個(gè)變量并帶了一個(gè)參數(shù)=valueVARIABLE=value;腳本認(rèn)為value是一個(gè)命令,命令執(zhí)行后的結(jié)果賦值給VARIABLEechohello#沒有使用變量echo$hello#輸出hello變量里面的值echo${hello}#同上變量賦值思考a=16+5;echo$a;結(jié)果是什么?let"a=1+2";echo$a;變量操作${var}$(cmd)$((exp))$echo$((3+2))5$echo$((3>2))1$echo$((25<3?2:3))3$echo$var$echo$((var=2+3))5$echo$var5$echo$((var++))5$echo$var6$Shell中的算術(shù)運(yùn)算1、使用expr外部命令r=`expr4+5`;注意!'4''+''5'這三者之間要有空白echo$r;2、使用$(())r=$((4+5));echo$r;3、使用$[]r=$[4+5];echo$r;4、使用let命令letn=4+5;echo$n;注意:乘冪怎么做?比如2的三次方,2**3雖然Bashshell有四種算術(shù)運(yùn)算方法,但并不是每一種都是跨平臺(tái)的,建議使用exprread命令用法:read變量名比如reada;執(zhí)行后,命令行等待輸入狀態(tài),輸入值后,該值賦給變量a試一下??reada;echo$a;字符操作表達(dá)式 含義${#string} $string的長(zhǎng)度

${string:position} 在$string中,從位置$position開始提取子串${string:position:length} 在$string中,從位置$position開始提取長(zhǎng)度為$length的子串

${string#substring} 從變量$string的開頭,刪除最短匹配$substring的子串${string##substring} 從變量$string的開頭,刪除最長(zhǎng)匹配$substring的子串${string%substring} 從變量$string的結(jié)尾,刪除最短匹配$substring的子串${string%%substring} 從變量$string的結(jié)尾,刪除最長(zhǎng)匹配$substring的子串

${string/substring/replacement} 使用$replacement,來(lái)代替第一個(gè)匹配的$substring${string//substring/replacement} 使用$replacement,代替所有匹配的$substring${string/#substring/replacement} 如果$string的前綴匹配$substring,那么就用$replacement來(lái)代替匹配到的$substring${string/%substring/replacement} 如果$string的后綴匹配$substring,那么就用$replacement來(lái)代替匹配到的$substring

exprmatch"$string"'$substring' 匹配$string開頭的$substring*的長(zhǎng)度expr"$string":'$substring' 匹配$string開頭的$substring*的長(zhǎng)度exprindex"$string"$substring 在$string中匹配到的$substring的第一個(gè)字符出現(xiàn)的位置exprsubstr$string$position$length 在$string中從位置$position開始提取長(zhǎng)度為$length的子串exprmatch"$string"'/($substring/)' 從$string的開頭位置提取$substring*expr"$string":'/($substring/)' 從$string的開頭位置提取$substring*exprmatch"$string"'.*/($substring/)' 從$string的結(jié)尾提取$substring*expr"$string":'.*/($substring/)' 從$string的結(jié)尾提取$substring**$substring是一個(gè)正則表達(dá)式.課堂練習(xí)輸入兩個(gè)數(shù)字,完成這兩個(gè)數(shù)字的加法,并輸出結(jié)果。效果如圖:選擇結(jié)構(gòu)if語(yǔ)法:ifCOMMANDS;then.....elifCOMMANDS;then......else.....fi舉例:判斷一個(gè)數(shù)字是否在[10,20]的范圍#!/bin/shecho-n"Pleaseinputanumber";readnum1;if[$num1-ge10]&&[$num1-le20];thenecho"Yes";elseecho"No";fitest整數(shù)比較

-eq等于,如:if["$a"-eq"$b"]-ne不等于,如:if["$a"-ne"$b"]-gt大于,如:if["$a"-gt"$b"]-ge大于等于,如:if["$a"-ge"$b"]-lt小于,如:if["$a"-lt"$b"]-le小于等于,如:if["$a"-le"$b"]

大于(需要雙括號(hào)),如:(("$a">"$b"))>=大于等于(需要雙括號(hào)),如:(("$a">="$b"))test文件[-a文件]如果文件存在為真。[-d文件]為真如果文件存在而且是一個(gè)目錄。[-e文件]為真如果文件存在。[-f文件]為真如果文件存在而且是一個(gè)普通文件。case語(yǔ)法case$numin1)echo"January";;雙分號(hào)結(jié)束2)echo"Feburary";;5)echo"may"每個(gè)case可以有多條命令

echo"sdfd"echo"sdf";;但最后一條命令一定是雙分號(hào)結(jié)束*)echo"notcorrectinput";;*)是其他值、default的意思esacfor循環(huán)#數(shù)字段形式foriin{1..10}doecho$idone#詳細(xì)列出(字符且項(xiàng)數(shù)不多)forFilein12345doecho$Filedone#對(duì)存在的文件進(jìn)行循環(huán)forshnamein`ls*.sh`doname=`echo"$shname"|awk-F.'{print$1}'`echo$namedone#查找循環(huán)(ls數(shù)據(jù)量太大的時(shí)候也可以用這種方法)forshnamein`find.-typef-name"*.sh"`doname=`echo"$shname"|awk-F/'{print$2}'`echo$namedone#((語(yǔ)法循環(huán)--有點(diǎn)像C語(yǔ)法,但記得雙括號(hào)for((i=1;i<100;i++))doif((i%3==0))thenecho$icontinuefidone#seq形式起始從1開始foriin`seq100`doif((i%3==0))thenecho$icontinuefidonewhile循環(huán)#while循環(huán)注意為方括號(hào)[],且注意空格min=1max=100while[$min-le$max]doe

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論