版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容院雙十一活動(dòng)方案策劃
- 雙11小活動(dòng)策劃方案
- 現(xiàn)服科技發(fā)展與創(chuàng)新人才培訓(xùn)模式探討
- 匯報(bào)技巧構(gòu)建高效商業(yè)匯報(bào)的核心要素
- 國(guó)慶節(jié)活動(dòng)方案披薩
- 7 角的初步認(rèn)識(shí) 第二課時(shí)(說(shuō)課稿)-2023-2024學(xué)年二年級(jí)下冊(cè)數(shù)學(xué)蘇教版001
- Unit 11 Chinese festivals(period 1)(說(shuō)課稿)-2023-2024學(xué)年滬教牛津版(深圳用)英語(yǔ)五年級(jí)下冊(cè)001
- 16 家鄉(xiāng)新變化(說(shuō)課稿)2023-2024學(xué)年統(tǒng)編版道德與法治二年級(jí)上冊(cè)
- 2023四年級(jí)數(shù)學(xué)上冊(cè) 二 加減法的關(guān)系和加法運(yùn)算律第5課時(shí)說(shuō)課稿 西師大版
- 2023九年級(jí)物理下冊(cè) 第十一章 物理學(xué)與能源技術(shù)11.3能源說(shuō)課稿 (新版)教科版
- 彩鋼瓦架子施工方案
- 民法學(xué)詳細(xì)教案
- 浙江省杭州市2023年中考一模語(yǔ)文試題及答案
- 上海市楊浦區(qū)2022屆初三中考二模英語(yǔ)試卷+答案
- 高中英語(yǔ)原版小說(shuō)整書閱讀指導(dǎo)《奇跡男孩》(wonder)-Part one 講義
- GB/T 4745-2012紡織品防水性能的檢測(cè)和評(píng)價(jià)沾水法
- 山東省中考物理總復(fù)習(xí) 八上 第1講 機(jī)械運(yùn)動(dòng)
- 國(guó)家綜合性消防救援隊(duì)伍消防員管理規(guī)定
- 2023年全國(guó)各地高考英語(yǔ)試卷:完形填空匯編(9篇-含解析)
- 五年級(jí)上冊(cè)數(shù)學(xué)習(xí)題課件 簡(jiǎn)便計(jì)算專項(xiàng)整理 蘇教版 共21張
- 疼痛科的建立和建設(shè)
評(píng)論
0/150
提交評(píng)論