



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1.shell基礎(chǔ)知識作者:StephenBourne在Bell實驗室開發(fā)建議:mansh查看相關(guān)UNIX上的改進(jìn)或特性(1)shell提示符及其環(huán)境/etc/passwd文件提示符:$/etc/profile$HOME/.profile(2)shell執(zhí)行選項n測試shellscript語法結(jié)構(gòu),只讀取shellscript但不執(zhí)行X進(jìn)入跟蹤方式,顯示所執(zhí)行的每一條命令,用于調(diào)度aTagallvariablesforexportc"string"從strings中讀取命令e非交互方式f關(guān)閉shell文件名產(chǎn)生功能hlocateandrememberfunctionsasdefindi交互方式-k從環(huán)境變量中讀取命令的參數(shù)r限制方式s從標(biāo)準(zhǔn)輸入讀取命令t執(zhí)行命令后退出(shellex計s)u在替換中如使用未定義變量為錯誤Vverbose,顯示shell輸入行這些選項可以聯(lián)合使用,但有些顯然相互沖突,如-e和一i.(3)受限制shell(RestirctedShell)sh-r或/bin/rsh不能執(zhí)行如下操作:cd,更改PATH,指定全路徑名,輸出重定向,因此可以提供ー個較好的控制和安全機(jī)制。通常rsh用于應(yīng)用型用戶及撥號用戶,這些用戶通常是看不到提示符的。通常受限制用戶的主目錄是不可寫的。不足:如果用戶可以調(diào)用sh,則rsh的限制將不在起作用,事實上如果用戶在vi及more程序中調(diào)用shell,而這時rsh的限制將不再起作用。(4)用set改變shell選項用戶可以在$提示符下用set命令來設(shè)置或取消shell的選項。使用ー設(shè)置選項,+取消相應(yīng)選項,大多數(shù)UNIX系統(tǒng)允許a,e,f,h,k,n,u,v和x的開關(guān)設(shè)置/取消。set-XV啟動跟蹤方式;顯示所有的命令及替換,同樣顯示輸入。set-tu關(guān)閉在替換時對未定義變量的檢査。使用echo$??顯示所有已設(shè)置的shell選項。(5)用戶啟動文件.profilePATH=$PATH:/usr/loacl/bin;exportPATH(6)shell環(huán)境變量CDPATH用于cd命令的査找路徑HOME/etc/passwd文件中列出的用戶主目錄IFSInternalFieldSeparator,默認(rèn)為空格,tab及換行符MAIL/var/mail/$USERNAMEmai!等程序使用PATHPS1,PS2默認(rèn)提示符(給及換行提示符(>)TERM終端類型,常用的有vt100,ansi,vt200,xterm等示例:$PS1="test:";exportPS1test:PS1="$";exportPS1$echo$MAIL/var/mail/username(7)保留字符及其含義$shell變量名的開始,如$var|管道,將標(biāo)準(zhǔn)輸出轉(zhuǎn)到下ー個命令的標(biāo)準(zhǔn)輸入#注釋開始&在后臺執(zhí)行ー個進(jìn)程?匹配ー個字符?匹配〇到多個字符(與DOS不同,可在文件名中間使用,并且含.)$ー使用set及執(zhí)行時傳遞給shell的標(biāo)志位$!最后ー個子進(jìn)程的進(jìn)程號$#傳遞給shellscript的參數(shù)個數(shù)$?傳遞給shellscript的參數(shù)$@所有參數(shù),個別的用雙引號括起來$?上一個命令的返回代碼$0當(dāng)前shell的名字$n(n:1-)位置參數(shù)$$進(jìn)程標(biāo)識號(ProcessIdentifierNumber,PID)>file輸出重定向>fiile輸出重定向,append轉(zhuǎn)義符及單引號:$echoaHOME$PATH”/home/hbwork/opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:$echo,$HOME$PATH'$HOME$PATH$echo$HOME$PATH$HOME/opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hbwork/bin其他:$dir=ls$$dir$aliasdirIs$dirIs>filelistIs?filelistwc-I/dev/rmt/0h書寫程序的目的是一次編程,多次使用(執(zhí)行)!$cat>backup.shcd/home/hbworkIs*|cpio-o>/dev/rmt/OhAD執(zhí)行:$shbackup.sh或?$chmod+xbackup.sh$./backup.sh技巧:在shellscript中加入必要的注釋,以便以后閱讀及維護(hù)。(2)shell是ー個(編程)語言同傳統(tǒng)的編程語言ー?樣,shell提供了很多特性,這些特性可以使你的shellscript編程更為有用,如:數(shù)據(jù)變量、參數(shù)傳遞、判斷、流程控制、數(shù)據(jù)輸入和輸出,子程序及以中斷處理等。.在shell編程中使用數(shù)據(jù)變量可以將程序變量更為通用,如在上面backup.sh中:cd$WORKDIRIs*Icpio-o>/dev/rmt/Oh.Shel!編程中的注釋以#開頭.對shell變量進(jìn)行數(shù)字運算,使用expr命令exprintegeroperatorinteger其中operator為+??/%,但對?的使用要用轉(zhuǎn)義符,如:$expr4*520$int='expr5+7'$echo$int12(3)Shel!編程的參數(shù)傳遞,可通過命令行參數(shù)以及交互式輸入變量(read)restoreall.sh對backup.sh程序的備份磁帶進(jìn)行恢復(fù)$cat>restoreall.shcd$WORKDIRcpio-i/dev/rmt/Ohrm-rf*改進(jìn)如ド:#當(dāng)使用了管道命令時,管理命令的返回代碼為最后ー個命令的返回代碼ifIs-a|cpio-o>/dev/rmt/Ohthenrm-rf*fi.if-then-else語句ifcommand_1thencommand_2elsecommand_3fi技巧:由于shell對命令中的多余的空格不作任何處理,個好的程序員會用這一-特性對自己的程序采用統(tǒng)ー的縮進(jìn)格式,以增強(qiáng)自己程序的可讀性..使用test命令進(jìn)行進(jìn)行條件測試格式:testconditionstest在以下四種情況下使用:a.字符比較b.兩個整數(shù)值的比較c,文件操作,如文件是否存在及文件的狀態(tài)等d.邏輯操作,可以進(jìn)行and/or,與其他條件聯(lián)合使用a.測試字符數(shù)據(jù):shell變量通常民政部下均作為字符變量str1=str2二者相長,相同str1!=str2不同-nstringstring不為空(長度不為零)-zstringstring為空stringstring不為空例:$str1=abcd#在含有空格時必須用引號括起來$test$str1=abcd$echo$?0$str1=uabcd”$test$str1=abcd$echo$?1Note:在test處理含有空格的變量時最好用引號將變量括起來,否則會出現(xiàn)錯誤的結(jié)果,因為shel!在處理命令行時將會去掉多余的空格,而用引號括起來則可以防止shell去掉這些空格.例:$str1=HH$test$str1$echo$?1$testM$str1M$echo$?0$test-n$str1test:argumentexpected$test"$str1”$echo$?0$b,整數(shù)測試:test與expr相同,可以將字符型變量轉(zhuǎn)換為整數(shù)進(jìn)行操作,expr進(jìn)行整數(shù)的算術(shù)運算,而test則進(jìn)行邏輯運算.表達(dá)式說明inti-eqint2相等?inti-neint2不等?inti-gtint2inti>int2?inti-geint2inti>=int2?inti-Itint2intiempty$test-rempty$echo$?0$test-sempty1$test!-sempty$echo$?0e.測試條件之邏輯運算-aAnd-oOr例:$test-rempty-a-sempty$echo$?1f.進(jìn)行test測試的標(biāo)準(zhǔn)方法因為test命令在shell編程中占有很重要的地位,為了使shell能同其他編程語言ー樣便于閱讀和組織,BourneShell在使用test測試時使用了另一種方法:用方括號將整個test測試?yán)ㄆ饋?$int1=4$[$int1-gt2]$echo$?0例:重寫unload程序,使用test測試#!/bin/sh#unload-programtobackupandremovefiles#syntax:unloaddirectory#checkargumentsif[$#-ne1]thenecho“usage:$0directory"exit1fi#checkforvaliddirectorynameif[!-d"$1"]thenecho"$1isnotadirectory"exit2ficd$1Is-a|cpio-o>/dev/rmt/Ohif[$?-eq0]thenrm-rf*elseecho"Aproblemhasoccuredincreatingbackup'1echo"Thedirectorywillnotbeereased"echo"Pleasecheckthebackupdevice"exit3fi#endofunload在如上示例中出現(xiàn)了exit,exit有兩個作用:ー是停止程序中其他命令的執(zhí)行,二是設(shè)置程序的退出狀態(tài)g.if嵌套及elif結(jié)構(gòu)ifcommandthencommandelseifcommandthencommandelseifcommandthencommandfififi改進(jìn):使用elif結(jié)構(gòu)ifcommandthencommandelifcommandthencommandelifcommandthencommandfielif結(jié)構(gòu)同if結(jié)構(gòu)類似,但結(jié)構(gòu)更清淅,其執(zhí)行結(jié)果完全相同.BourneShell及Shell編程(2)h.交互式從鍵盤讀入數(shù)據(jù)使用read語句,其格式如下:readvar1var2...varnread將不作變量替換,但會刪除多余的空格,直到遇到第一個換行符(回車),并將輸入值依次賦值給相應(yīng)的變量。例:$readvar1var2var3Hellomyfriends$echo$var1$var2$var3Hellomyfriends$echo$var1Hello$readvar1var2var3Hellomydearfriends$echo$var3dearfriendswhile循環(huán):格式:whilecommanddocommandcommandcommanddone例:計算1到5的平方#!/bin/sh##Filename:square.shint=1while[$int-Ie5]dosq='expr$int*$int'echo$sqint='expr$int+1'doneecho"Jobcompleted"$shsquare.sh1491625Jobcompleteduntil循環(huán)結(jié)構(gòu):格式:untilcommanddocommandcommandcommanddone示例:使用until結(jié)構(gòu)計算1-5的平方#!/bin/shint=1until[$int-gt5]dosq="expr$int*$int'echo$sqint='expr$int+1'doneecho"Jobcompleted"使用shift對不定長的參數(shù)進(jìn)行處理在以上的示例中我們總是假設(shè)命令行參數(shù)唯一或其個數(shù)固定,或者使用$*將整個命令行參數(shù)傳遞給shellscript進(jìn)行處理。對于參數(shù)個數(shù)不固定并且希望對每個命令參數(shù)進(jìn)行單獨處理時則需要shift命令。使用shift可以將命令行位置參數(shù)依次移動位置即$2,$1,$3つ$2,在移位之前的第一個位置參數(shù)$1在移位后將不在存在。示例如F:#!/bin/sh##Filename:shifteruntil[$#-eq0]doecho"Argumentis$1and'expr$#-1'argument(s)remain"shiftdone$shifter1234Argumentis1and3argument(s)remainArgumentis2and2argument(s)remainArgumentis3and1argument(s)remainArgumentis4and0argument(s)remain$使用shift時,每進(jìn)行ー次移位,$#減1,使用這一特性可以用until循環(huán)對每個參數(shù)進(jìn)行處理,如下示例中是一個求整數(shù)和的shellscript:#!/bin/sh#sumints-aprogramtosumaseriesofintegers#if[$#-eq0]thenecho"Usage:sumintsintegerlist*'exit1fisum=0until[$#-eq0]dosum='expr$sum+$1'shiftdoneecho$sum$shsumints32434341234438$使用shift的另ー個原因是BourneShel[的位置參數(shù)變量為$1?$9,因此通過位置變量只能訪問前9個參數(shù)。但這并不等于在命令行上最多只能輸入9個參數(shù)。此時如果想訪問前9個參數(shù)之后的參數(shù),就必須使用shift.另外shift后可加整數(shù)進(jìn)行ー次多個移位,如:shift3.for循環(huán)格式:forvarinarg1arg2...argndocommandcommanddone示例:$forletterinabcde;doecho$letter;doneabcde對當(dāng)前目錄下的所有文件操作:$foriin*doif[-f$i]thenecho"$iisafile**elif[-d$i]echoH$iisadirectory"fidone求命令行上所有整數(shù)之和:#!/bin/shsum=0forINTin$*dosum='expr$sum+$INT'doneecho$sum從循環(huán)中退出:break和continue命令break立即退出循環(huán)continue忽略本循環(huán)中的其他命令,繼續(xù)下一下循環(huán)在shel!編程中有時我們要用到進(jìn)行無限循環(huán)的技巧,也就是說這種循環(huán)一直執(zhí)行碰到break或continue命令。這種無限循環(huán)通常是使用true或false命令開始的。UNIX系統(tǒng)中的true總是返加〇值,而false則返回非零值。如下所示:一直執(zhí)行到程序執(zhí)行了break或用戶強(qiáng)行中斷時オ結(jié)束循環(huán)whiletruedocommandcommanddone上面所示的循環(huán)也可以使用untilfalse,如下:untilfalsedocommandcommanddone在如下shellscrip”p同時使用了continue,break以及case語句中的正規(guī)表達(dá)式用法:#!/bin/shInteractiveprogramtorestore,backup,orunloadadirectoryecho"WelcometothemenudrivenArchiveprogram"whiletruedoDisplayaMenuechoecho"MakeaChoicefromtheMenubelow"echo_echo"1RestoreArchive"echo"2Backupdirectory"echo"3Unloaddirectory"echo"4Quit"echoReadtheuser'sselectionecho-n"EnterChoice:"readCHOICEcase$CHOICEin[1-3])echoReadandvalidatethenameofthedirectoryecho-n"Whatdirectorydoyouwant?"readWORKDIRif[!-d"$WORKDIR"]thenecho"Sorry,$WORKDIRisnotadirectory"continuefiMakethedirectorythecurrentworkingdirectorycd$WORKDIR;;4) #:為空語句,不執(zhí)行任何動作*)echo"Sorry,$CHOICEisnotavalidchoice"continueesaccase"$CHOICE"in1)echo"Restoring..."cpio-i/dev/rmt/Oh;;ech
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)視頻內(nèi)容審核補充合同
- 法院執(zhí)行法拍房優(yōu)先購買權(quán)放棄及補償協(xié)議
- 兒童友好購物中心樓層委托經(jīng)營管理合同
- 氣管切開康復(fù)護(hù)理
- Part3-4 Unit3 Internship課件-【中職專用】高一英語(高教版2021基礎(chǔ)模塊2)(2023修訂版)
- 遺產(chǎn)繼承管理合同(2篇)
- 2025版高考地理一輪復(fù)習(xí)專題八區(qū)域可持續(xù)發(fā)展高頻考點72森林開發(fā)和生物多樣性減少練習(xí)含解析
- 2025版高考化學(xué)一輪復(fù)習(xí)課后限時集訓(xùn)31醛羧與酯含解析新人教版
- 護(hù)理案例精髓解析
- 數(shù)控技術(shù)應(yīng)用培訓(xùn)體系
- 2025年云南省大理州中考一模地理試題(原卷版+解析版)
- 軟件轉(zhuǎn)讓合同協(xié)議書
- 藥房藥師勞動合同協(xié)議
- 專題08 自然災(zāi)害和地理信息技術(shù)- 2025年十年高考地理真題分項匯編(學(xué)生卷)
- 數(shù)學(xué)在生活中的奇遇
- 2024年金湖縣事業(yè)單位招聘真題
- 2025年廚師職業(yè)技能鑒定高級試卷:餐飲企業(yè)品牌建設(shè)與推廣
- 五年級數(shù)學(xué)下試卷及答案
- 2025年高考政治答題模板:選必修123主觀題答題語言總結(jié)
- 區(qū)塊鏈在特種設(shè)備數(shù)據(jù)共享交換模型中的研究
- 遼寧省沈陽市沈北新區(qū)2024-2025學(xué)年初三下學(xué)期質(zhì)量調(diào)研考試(一模)語文試題含解析
評論
0/150
提交評論