第4章 shell編程初步_第1頁(yè)
第4章 shell編程初步_第2頁(yè)
第4章 shell編程初步_第3頁(yè)
第4章 shell編程初步_第4頁(yè)
第4章 shell編程初步_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章shell編程初步4.1shell命令行結(jié)構(gòu)4.2shell命令中的元字符4.3創(chuàng)建新的shell命令4.4利用shell命令參數(shù)編程4.5程序輸出做為shell命令參數(shù)4.6shell變量4.7here文件4.8for循環(huán)語(yǔ)句4.9bundle合并文件程序4.1shell命令行結(jié)構(gòu)shell命令格式:command[-options]arg1arg2arg3……命令:command選項(xiàng):[-options]參數(shù):arg1:第1個(gè)參數(shù)arg2:第2個(gè)參數(shù)arg3:第3個(gè)參數(shù)…①單一命令$who;沒(méi)有參數(shù)youtty2Sep2807:51jp1 tty4Sep2808:32$shell命令舉例②用分號(hào)或管道號(hào)連接多個(gè)命令$date;who;順序執(zhí)行ThuSep2809:07:23EDT2000youtty2Sep2807:51JPT1tty4Sep2808:32$$who|wc;who輸出=>wc輸入ThuSep2809:08:48EDT200021060$shell命令舉例③多個(gè)命令輸出送入管道,用括號(hào)組成復(fù)合命令$(date;who)|wc31689$錯(cuò)誤:$date;who|wcThuSep2809:08:48EDT200021060$shell命令舉例④tee:管道數(shù)據(jù)流輸出到文件$(date;who)|teesave|wc31689$catsaveThuSep2809:13:22EDT2000youtty2Sep2807:51jp1tty4Sep2808:32$wc<save31689$shell命令舉例⑤后臺(tái)命令,命令行最后加&,創(chuàng)建后臺(tái)進(jìn)程$(sleep300;echoTeaisready)&

5291$prfile|lpr&7620$shell命令舉例4.2shell命令中的元字符元字符含義

>

prog>文件,將標(biāo)準(zhǔn)輸出重定向到文件>>

prog>>文件,將標(biāo)準(zhǔn)輸出附加到文件<

prog<文件,從文件中獲取標(biāo)準(zhǔn)輸入<< <<字符串,here文件,表示標(biāo)準(zhǔn)輸入從下一行開(kāi)始讀入直到出現(xiàn)該字符串為止shell命令中的元字符元字符含義*

匹配文件名中的零個(gè)或多個(gè)字符?

匹配文件名中的任何單個(gè)字符\ C

表示轉(zhuǎn)義字符[ccc]

匹配文件名中ccc范圍內(nèi)的任何字符,如0-9或a-zshell命令中的元字符元字符含義#.....

表示注釋‘...’

單引號(hào)中…表示文字“...” 雙引號(hào)中…中的$、‘…’和\得到解釋后,將…作為文本文字shell命令中的元字符元字符 含義&

P1&,啟動(dòng)后臺(tái)進(jìn)程;

p1;p2,表示先執(zhí)行p1,再執(zhí)行p2|

p1|p2,將p1的輸出作為p2的輸入&& p1&&p2,運(yùn)行p1;若成功,再運(yùn)行p2|| p1||p2,運(yùn)行p1;若不成功,再運(yùn)行p2shell命令中的元字符元字符 含義`...`

運(yùn)行…中的命令;輸出結(jié)果代替`…`{...}

在當(dāng)前shell中運(yùn)行{…}中的命令(...)

在子shell里運(yùn)行(…)中的命令

4.3創(chuàng)建新的shell命令4.3.1設(shè)置工作目錄4.3.2創(chuàng)建shell命令文件4.3.3執(zhí)行shell命令文件$mkdirshprg創(chuàng)建shell程序目錄$mkdirbin 創(chuàng)建bin程序目錄4.3.1設(shè)置工作目錄首先轉(zhuǎn)到shell程序目錄:$cdshprg創(chuàng)建shell命令文件方法:用echo命令創(chuàng)建shell命令文件$echo‘文件內(nèi)容’>文件名用vi創(chuàng)建shell命令文件$vi文件名4.3.2創(chuàng)建shell命令文件功能:計(jì)算正在注冊(cè)的用戶數(shù)$echo‘who|wc–l’>nu或$vinu編輯文件who|wc–l$catnuwho|wc–l$第1個(gè)shell文件:nu方法一:shell命令文件作為shell輸入$sh<文件名$sh文件名舉例:$sh<nu或$shnu

4$4.3.3執(zhí)行shell命令文件方法二:為shell命令文件增加執(zhí)行權(quán)限,在當(dāng)前目錄下直接執(zhí)行$chmod+x文件名$./文件名舉例:$chmod+xnu$./nu 4$

執(zhí)行shell命令文件方法三:增加shell命令查找路徑$HOME/bin$PATH=$PATH:$HOME/bin(原始查找路徑:/bin,/usr/bin)將具有執(zhí)行權(quán)限shell命令文件拷貝到$HOME/bin目錄,在任一目錄下直接執(zhí)行$chmod+x文件名$cp文件名$HOME/bin$文件名

執(zhí)行shell命令文件舉例:$PATH=$PATH:$HOME/bin$chmod+xnu$cpnu$HOME/bin$cdXXX$nu 就像執(zhí)行其他shell命令一樣4$執(zhí)行shell命令文件shell命令格式:command[-options]arg1arg2……shell命令:$0 shell命令本身,commandshell命令參數(shù):$1-$9 $1…$9,shell命令參數(shù), $1=arg1,$2=arg2,…4.4利用shell命令參數(shù)編程$cxfilename$0:cx$1:filenamecx程序是為filename增加執(zhí)行權(quán)限舉例:為文件增加執(zhí)行權(quán)限功能:為文件增加執(zhí)行權(quán)限$echo‘chmod+x$1’>cx(cx第一版,單個(gè)參數(shù))$chmod+xcx;為cx增加執(zhí)行權(quán)限$cpcx$HOME/bin;把cx拷貝到用戶命令命令第2個(gè)shell文件:cx有了cx,以后就可以使用cx為任何shell程序文件增加執(zhí)行權(quán)限了。$echo‘echoHi,there!’>hello執(zhí)行cx$cxhello≡$chmod+xhello$cphello$HOME/bin

$hello執(zhí)行helloHi,there!$第3個(gè)shell文件:hello適應(yīng)多個(gè)參數(shù):$*$echo‘chmod+x$*’>cx修改cx文件

$cpcx$HOME/bin拷貝cx到用戶命令目錄執(zhí)行cx第二版$cxhellonu…可以為多個(gè)文件增加執(zhí)行權(quán)限$cx第二版:處理多個(gè)參數(shù)功能:計(jì)算文件行數(shù)$catlc

wc–l$*$cxlc$cplcHOME/bin$第4個(gè)shell文件:lc執(zhí)行l(wèi)c$lc$HOME/bin/*1/home/you/bin/cx/home/you/bin/hello2/home/you/bin/lc1/home/you/bin/nu4total$功能:發(fā)送郵件給多個(gè)用戶$catm#m:aconcisewaytotypemailmail$*$cxm$cpm/$HOME/bin$mmarybobmikepaul<letter$第5個(gè)shell文件:m編輯電話號(hào)碼本:$catphone-bookdial-a-joke212-976-3838dial-a-prayer212-246-4200dialsanfa212-976-3636dowjonesreport212-976-4141$第6個(gè)shell文件:114功能:查電話號(hào)碼本程序$cat114第一版grep$*$HOME/shprg/phone-book$cx114$cpcx$HOME/bin$第6個(gè)shell文件:114執(zhí)行114程序:$114jokedial-a-joke212-976-3838$114dialdial-a-joke212-976-3838dial-a-prayer212-246-4200dialsanta212-976-3636$

執(zhí)行正確!第6個(gè)shell文件:114執(zhí)行114程序:$114‘dowjones’grep:can’topenjones$執(zhí)行錯(cuò)誤!為什么?第6個(gè)shell文件:114原因:·shell對(duì)單引號(hào)內(nèi)的字符串不加任何解釋,直接使用。解決辦法:·使用雙引號(hào),因?yàn)閟hell對(duì)雙引號(hào)內(nèi)的字符串,首先解釋諸如$、\、`...`、空格等特殊字符后再使用。第6個(gè)shell文件:114修改114程序:$cat114第二版grep“$*”$HOME/shprg/phone-book$cp114$HOME/bin覆蓋原來(lái)的114$$114dowjones再次執(zhí)行dowjonesreport212-976-4141$

執(zhí)行正確!第6個(gè)shell文件:114功能:按n列輸出文件$cat2按2列輸出文件pr-2-t-l1$*$who|2drh tty0Sep2821:23cvwtty5Sep2821:09dmr tty6Sep2822:10scj tty7Sep2822:11you tty9Sep2823:00jlbttybSep28:19:58$第7個(gè)shell文件:n$cat3 按3列輸出文件pr-3-t-l1$*$cat4 按4列輸出文件pr-4-t-l1$*$cat5 按5列輸出文件pr-5-t-l1$*$cat6 按6列輸出文件pr-6-t-l1$*$程序3、4、5、6,內(nèi)容與文件2類似,只是列數(shù)不同。第7個(gè)shell文件:n例如,按5列輸出文件。$ls$HOME/bin|511423456cxhellolcmnu$第7個(gè)shell文件:n方法:使用

`command`獲得程序輸出。例如:$echoAtthetonethetimewillbe`date`Atthetonethetimewillbesatsep3014:02:15EDT2000$4.5程序輸出做為shell命令參數(shù)功能:生成收件人列表$catmailinglist輸出收件人列表shell文件echodonwhrejsmb$cxmailinglist增加執(zhí)行權(quán)限$cpmailinglist$HOME/bin$mailinglist

測(cè)試輸出收件人列表donwhrejsmb$$mail`mailinglist`<letter$第8個(gè)shell文件:mailinglist使用pick命令選擇收件人$mail`pick\`mailignlist\``<letterdon?ywhr?ejs?mb?y$第8個(gè)shell文件:mailinglist4.6.1系統(tǒng)變量4.6.2用戶變量4.6shell變量4.6.1系統(tǒng)變量序號(hào)變量名變量值1用戶名$USER2用戶注冊(cè)目錄$HOME3命令訪問(wèn)路徑 $PATH4cd命令路徑 $CDPATH5第一提示符$PS16第二示符 $PS27終端類型 $TERM8運(yùn)行的shell$SHELL9命令參數(shù)的個(gè)數(shù)$#10前一個(gè)命令返回的狀態(tài)值(0:成功)$?11當(dāng)前shell進(jìn)程的pid$$12最近訪問(wèn)的后臺(tái)進(jìn)程的pid$!顯示shell變量:$echo$HOME/home/you$echo$PATH/home/you/bin:/bin:/usr/bin:/bin……$echo$USERyou$(1)顯示shell變量為PATH增加一個(gè)執(zhí)行路徑。$PATH=$PATH:/home/you/shprg$echo$PATH/home/you/bin:/bin:/usr/bin:/bin……

/home/you/shprg$(2)改變系統(tǒng)變量改變PS1,將第一提示符改為%。$PS1=%%

ls…%改變系統(tǒng)變量4.6.2用戶變量①變量定義和引用②變量引用及參數(shù)替換③變量作用域④變量替換①變量定義和引用舉例:$ux=UNIX定義$echo$ux引用UNIX$$bh=BUAA定義$echo$bh引用BUAA$定義變量:變量名=值引用變量:

$變量名通過(guò)“$變量名”可以訪問(wèn)shell變量的值②變量引用及參數(shù)替換通過(guò)“$變量名”可以引用shell變量的值。$echo$ux(取變量ux的值)UNIX(系統(tǒng)回應(yīng)ux的值)$如果一個(gè)變量未被賦值,它的值是一個(gè)空串。$echo$abc$(abc的值是空串,無(wú)顯示)變量引用及參數(shù)替換

在許多情況下,在變量取值時(shí)用{}把變量括住,以便強(qiáng)調(diào)指出變量名。$echo${ux}

取變量ux的值UNIX$echo${ux}tm取ux的值,并和tm組合UNIXtm$變量引用及參數(shù)替換$hi=‘Howareyou’$echo${hi}today(取變量hi的值,Howareyoutoday并和today組合)$變量引用及參數(shù)替換利用雙引號(hào)進(jìn)行變量替換,也可以進(jìn)行組合。$echo“$ux”tmUNIXtm$$echo“$hi”todayHowareyoutoday$③變量作用域

在一般情況下,變量?jī)H在給它賦值的那個(gè)shell下起作用,即它是一個(gè)局部變量。$ux=UNIX 為變量ux賦值$echo$ux 取變量ux的值UNIX 在當(dāng)前shell回送ux變量的值$變量作用域$ux=UNIX$sh 創(chuàng)建一個(gè)子shell進(jìn)程$echo$ux 在子shell訪問(wèn)變量ux,值為空串$exit 退出子shell$echo$ux 在原shell,再次讀uxUNIX $ 變量作用域$ux=UNIX$exportux 使變量ux成為全局變量$sh

再次創(chuàng)建一個(gè)子shell進(jìn)程$echo$ux 在子shell訪問(wèn)變量uxUNIX ux的值從父進(jìn)程帶到子進(jìn)程$exit 退出子shell$④變量替換在shell中,如果變量var未賦值,則${var}為空。例如:$echo“TheCDPATHis$CDPATH”如果CDPATH未賦值,則顯示TheCDPATHis$變量替換shell提供了一些為未賦值的變量給出值的方法。①${var:-word}若變量var有值且非空,取該值;否則取word為它的值,同時(shí)var的值不變。②${var:=word}若變量var有值且非空,取該值;否則取word為它的值,同時(shí)將word賦給變量var。③${var:+word}若變量var有值且非空,取word為它的值,否則var的值不變(即仍為空)。變量替換例如:$echo“TheCDPATHis$CDPATH”TheCDPATHis改為:$echo“TheCDPATHis${CDPATH:-undefined}”TheCDPATHisundefined$echo$CDPATH$ 4.7here文件4.7.1什么是here文件4.7.2here文件使用方法4.7.1什么是here文件

here文件是一種為shell命令提供數(shù)據(jù)的機(jī)制,用戶利用here文件可以把shell命令和命令所需要的輸入數(shù)據(jù)同時(shí)放在一個(gè)文件內(nèi)。shellI/O重定向形式含義>文件將標(biāo)準(zhǔn)輸出定向到文件>>文件將標(biāo)準(zhǔn)輸出附加到文件<文件從文件file中取得標(biāo)準(zhǔn)輸入n>文件將輸出從文件描述符n定向到文件n>>文件將輸出從文件描述符n附加到文件n>&m將文件描述符n和m的輸出合并n<&m將文件描述符n和m的輸入合并<<s here文件,下一行開(kāi)始作為標(biāo)準(zhǔn)輸入,直到首次出現(xiàn)s字符串為止;4.7.2here文件使用方法表示方法:命令<<s……h(huán)ere文件內(nèi)容……S說(shuō)明:<<表明命令的輸入就是該文件的一部分。<<后面的緊接著的字符串S,為here文件開(kāi)始符。最后一行的字符串S,為here文件結(jié)束符,必須與開(kāi)始符相同

。Here文件舉例查電話號(hào)碼本程序:114$cat114grep“$*”<<Enddial-a-joke212-976-3838dial-a-prayer212-246-4200dialsanta212-976-3636dowjonesreport212-976-4141End$Here文件開(kāi)始符Here文件結(jié)束符Here文件內(nèi)容shell實(shí)際上也是一種編程語(yǔ)言,它有變量、循環(huán)、條件轉(zhuǎn)移等。for語(yǔ)句:for變量in文件列表do

命令done4.8for循環(huán)語(yǔ)句可以用一個(gè)for語(yǔ)句,在一行輸出一個(gè)文件名。$foriin*>do>echo$i>done……$可以是任意shell變量,但習(xí)慣上用i表示。舉例$lsch2.*|5ch2.1ch2.2ch2.3ch2.4ch2.5ch2.6ch2.7

old$catcmp_ch2foriinch2.*doecho$i:diff–bold/$i$iechodone|pr-h“diff`pwd`/old`pwd`”|lpr&$第9個(gè)shell文件:

對(duì)一組文件的新舊版本進(jìn)行比較。程序:bundle功能:

將一個(gè)目錄下的所有shell文件合并,打包成一個(gè)shell文件,然后發(fā)給另一個(gè)用戶。該用戶收到后,執(zhí)行打包后的shell文件,則可執(zhí)行解包操作,把打包文件中的所有原來(lái)的shell文件恢復(fù)到當(dāng)前目錄中。4.9bundle:合并文件程序$catbundle#bundle:groupfilesintodistributionpackageecho‘#Tounbundle,shthisfile’f

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論