版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
shell編程-shell編程簡介介紹shell編程目標(biāo):達(dá)成這一章,你能做以下事情:寫出簡單的shell程序經(jīng)過環(huán)境變量傳達(dá)參數(shù)給經(jīng)過地點參數(shù)傳達(dá)參數(shù)給
shellshell
程序程序使用特別shell變量,*和#使用shift和read命令1.1shell編程概括shell程序是一個包括UNIX命令的一般文件。這個文件的同意權(quán)限起碼應(yīng)當(dāng)為可讀和可履行。在shell提示符下鍵入文件名便可履行
shell
程序。shell
程序能夠經(jīng)過三種方式接受數(shù)據(jù):shell是一個命令解說器,它會解說并履行命令提示符下輸入的命令??墒?,你可能想要多次履行一組命令,shell供給了一種功能,讓你將這組命令寄存在一個文件中,而后你能夠象unix系統(tǒng)供給的其余程序相同履行這個文件,這個命令文件就叫做shell程序或許shell腳本。當(dāng)你運轉(zhuǎn)這個文件,它會象你在命令行輸入這些命令相同地履行這些命令。為了讓shell能讀取而且履行你的shell程序,shell腳本的文件權(quán)限一定被設(shè)置為可讀和可履行。為了讓shell能夠找到你的程序,你能夠選擇輸入完全路徑名,或許將這個腳本的路徑放在于你的PATH環(huán)境變量指定的路徑列表中。很多的用戶會在他們的HOME目錄下創(chuàng)立一個bin目錄來寄存他們自己開發(fā)的script,而后將$HOME/bin加入到他們的PATH環(huán)境變量中。你能夠?qū)懗鎏貏e復(fù)雜的shell腳本,因為shell腳本支持變量、命令行參數(shù)、交互式輸入、tests(判斷))、branches(分支),和loops(循環(huán))等復(fù)雜的構(gòu)造。1.2shell程序舉例$catmyprog#thisistheprogrammyprogdatels–F$myprog要創(chuàng)立一個shell程序,考慮進(jìn)行以下步驟:$vimyprogshell命令的程序。thisistheprogrammyprogdatels–F$chmod+xmyprog增添文件的履行模式$myprogThuJul1111:10EDT1994F1f2memo/myprog*第一使用一個文本編寫器創(chuàng)立一個shell程序myprog。在程序履行以前,這個文件一定被給予可履行的權(quán)限。而后在命令提示符下輸入這個程序名,如上例所示,當(dāng)myprog履行的時候,一個子shell讀取輸入而不是從命令行讀取輸入,
會被創(chuàng)立。這個子shell會從shell程序言件myprog這個shell中的每個命令的履行都會創(chuàng)立一個子shell。一旦所有的命令都被履行,所有的子shell會中斷,而后會返回到原始的父shell。Shell程序中的說明:介紹在shell程序中供給說明語句來注明程序的內(nèi)容。說明由一個不會去履行任安在#以后的語句。#能夠出此刻命令行的任何地點。
#符號開始,
Shell注意:你不可以夠給shell程序取名為test因為test是一個內(nèi)部的shell命令。1.3傳達(dá)數(shù)據(jù)給shell程序$color=lavender$catcolor1echoyouarenowrunningprogram:color1echothevalueofthevariablecoloris:$color$chmod+xcolor1$color1youarnowrunningprogram:color1thevalueofthevariablecoloris:$exportcolor$color1youarenowrunningprogram:color1thevalueofthevariablecoloris:lavender傳達(dá)數(shù)據(jù)給shell腳本的一種方法就是經(jīng)過環(huán)境。在上例中,當(dāng)?shù)刈兞縞olor被賦值為lavender,而后創(chuàng)立了shell程序color1;而后改正為可履行權(quán)限;而后這個shell程序被履行,color1腳本的企圖是顯示color變量的值,可是因為color是一個當(dāng)?shù)刈兞?,屬于父shell私有的,運轉(zhuǎn)color1產(chǎn)生的子shell不可以辨別這個變量,所以不能打印出它的值,而當(dāng)color被輸出到環(huán)境中就能夠被子shell讀取。相同,因為shell進(jìn)度不可以夠改正父進(jìn)度的環(huán)境,對一個子進(jìn)度中的環(huán)境變量從頭賦值不會影響到父進(jìn)度環(huán)境中的值。如以下的shell腳本中的color2。echoTheoriginalvalueofthevariablecoloris$colorech0Thisprogramwillsetthevalueofcolortoambercolor=amberechoThevalueofcolorisnow$colorechoWhenyourprogramconcludes,displaythevalueofthecolorvariable察看在你設(shè)置了color的值后有什么變化。輸出這個變量,而后履行color2:$exportcolor=lavender$echo$colorlanvender$color2TheoriginalvalueofthevariablecolorislavenderTheprogramwillsetthevalueofcolortoamberThevalueofvolorisnowamberWhenyourprogamconcludes,displaythevalueofthecolorvariable,$echo$colorlanvender1.4shell程序的參數(shù)命令行:例子:$catcolor3echoyouarenowrunningprogram:$0echoThevalueofcommandlineargument\#1is:$1echoThevalueofcommandlineargument\#2is:$2$chmod+xcolor3$color3redgreenYouarenowrunningprogram:color3Thevalueofcommandlineargument#1is:redThevalueofcommandlineargument#2is:green大部分的UNIX系統(tǒng)命令能夠接收命令行參數(shù),這些參數(shù)往常告訴命令它將要操作的文件或目錄(cpf1f2),此外指定的參數(shù)擴(kuò)展命令的能力(ls–l),或許供給文本字符串(bannerhithere)。命令行參數(shù)對shell程序相同有效,使用這類方式傳遞信息給你的程序十分方便。通過開發(fā)一個接收命令行參數(shù)的程序,你能夠傳達(dá)文件或許目錄命令名給你的程序處理,就像你運轉(zhuǎn)UNIX系統(tǒng)命令相同,你也能夠定義命令行選項來讓命令履行用shell程序額外的功能。在shell程序中的命令行參數(shù)與參數(shù)在命令行的地點有關(guān),這樣的參數(shù)被稱為地點參數(shù),因為對每一個特別變量的賦值依賴一這些參數(shù)在命令行中的地點,變量的變量名對應(yīng)變量在命令行中的地點,所以這些特別的變量名為數(shù)字0,1,2等,向來到最后的參數(shù)被傳達(dá),變量名的存取也經(jīng)過相同的方法,在名字前面加上$符號,所以,為了存取你的shell程序中的命令行參數(shù),你能夠應(yīng)用$0,$1,$2等等。在$9此后,必須使用括號:$(10),$(11),不然,shell會將$10當(dāng)作是$1后邊跟一個0。而$0會向來保留程序或命令的名字1.4shell程序的參數(shù)(持續(xù))以下的shell程序會安裝一個程序,這個程序作為一個命令行參數(shù)被安裝到你的bin目錄:第一創(chuàng)立程序my_install,注意目錄$HOME/bin應(yīng)當(dāng)早先存在。$cat>my_installecho$0willinstall$1toyourbindirectorychmod+x$1mv$1$HOME/binechoInstallationof$1iscompletectrl+d$chmod+xmy_intalll$my_installcolor3my_installwillinstallcolor3toyourbindirectoryInstallationofcolor3iscomplete$這個例子中,程序指明第一個命令行參數(shù)為一個文件名,而后加上履行權(quán)限,而后挪動到你目前目錄下的bin目錄下。記著UNIX系統(tǒng)的老例是存貯程序在bin的目錄下。你或許想要在你的HOME目錄下創(chuàng)立一個bin目錄,在這個目錄下你能夠儲存你的程序言件,記著要將你的bin目錄放在PATH環(huán)境變量中,這樣shell才會找到你的程序。1.5一些特別shell變量-#和*#*例子:$catcolor4echoThereare$comandlineargumentechoTheyare$*ehcoThefirstcommandlineargumentis$1$chmod+xcolor4$color4redgreenyellowblueTheyare4commandlineargumentsTheyareredgreenyellowblueThefirstcommandlineargumentisred$shell程序都不是很靈巧,如color3需要輸入兩個正確的參數(shù)而到現(xiàn)在為止我們看到的my_install只需要一個。往常在創(chuàng)立一個接收命令行參數(shù)的shell程序的時候,你想要用戶輸入一個參數(shù)的變量號碼。你同時要程序履行成功,不論用戶鍵入1個參數(shù)或是20個參數(shù)。當(dāng)辦理變量參數(shù)列表的時候,特別shell變量會供給你很多的靈巧性。經(jīng)過$#你能夠知道有多少參數(shù)已經(jīng)被輸入,經(jīng)過$*能夠存取所有的參數(shù)列表,而不論參數(shù)的數(shù)目。請注意參數(shù)($0)不在$*這個參數(shù)列表里。每一個命令行參數(shù)都是相互獨立的,你能夠經(jīng)過$*集中檢索這些參數(shù),也能夠經(jīng)過$1,$2,$3等等來獨立的檢索這些參數(shù)。1.5一些特別的shell變量-#和*(持續(xù))一個能夠接收多個命令行參數(shù)的安裝程序的例子:$cat>my_install2echo$0willinstall$#filestoyourbindirectoryechoThefilestobeinstalledare:$*chmod+x$*mv$*$HOME/binechoInstallatoniscompletectril+d$chmod+xmy_install2$my_install2color1color2my_intall2willinstall2filestoyourbindirectoryThefilestobeinstalledare:color1,color2Intallaitoniscomplete這個安裝程序更為靈巧,假如你有多個文件要安裝,你僅需要履行這個程序一次,只需一次輸入多個名字即可。特別重要的是:假如你計劃傳達(dá)整個參數(shù)的字符串給一個命令,這個命令一定能夠接收多個參數(shù)。在以下的腳本中,用戶供給一個目錄名作為一個命令行參數(shù)。程序會改正到指定的目錄,顯示目前的地點,而且列出內(nèi)容。$catlist_dircd$*echoYouareinthe$(pwd)directoryechoThecontentsofthedirectoryare:ls–F$list_dirdir1dir2dir3sh:cd:badargumentcount因為cd命令不可以同時進(jìn)入到多個目錄中,這個程序履行會犯錯。1.6shift命令向左挪動所有的在*中的字符串#的數(shù)目減少n個(n的默認(rèn)值是
n個地點1)語法:例子:
shift[n]$catcolor5orig_args=$*echoThereare$#commandlineargumentsechoTheyare$*echoShiftingtwoargumentsshift2echoThereare$#comandlineargumentsechoTheyare$*echoShiftingtwoargumentsshift2;final_args=$*echoOriginalargumentsare:$orig_argsechoFinalargumentsare:$final_argsshift命令會從頭分派命令行參數(shù)對應(yīng)地點參數(shù),在shiftn此后,所有的*中的參數(shù)會向左挪動n個地點。同時$#會減n。默認(rèn)的n為1。Shift命令不會影響到參數(shù)0的位置。一旦你達(dá)成一次挪動,被移出命令行的參數(shù)會丟掉。假如你想在你的程序中引用這個參數(shù),你需要在履行shift以前存貯這個參數(shù)到一個變量中。Shift命令能夠用于:存取一組參數(shù)的地點,比如一系列的x,y的坐標(biāo)從命令行刪除命令選項,假設(shè)選項在參數(shù)以前。例子:$color5redgreenyelloworangeblackThereare6commandlineargumentsTheyareredgreenyellowblueorangeblackShiftingtwoargumentsThereare4commandlineargumentsTheyareyellowblueorangeblackShiftgingtwoargumentsOriginalargumentsare:redgreenyellowblueorangeblackFinalargumentare:orangeblack$1.7read命令語法:readvariable[variable......]例子:$catcolor6echoThisprogrampromptsforuserinputecho“pleaseenteryourfavoritetwocolorsc”readcolor_acolor_bechoThecolorsyouenteredare:$color_b$color_a$chmod+xcolor6$color6ThisprogrampromptsforuserinputPleaseenteryourfavoritetwocolors->redblueThecolorsyouenteredare:bluered$color6ThisprogrampromptsforuserinputPleaseenteryoufavoritetwocolors->redbluetanThecoloryouenterdare:bluetanred假如使用命令行參數(shù)傳達(dá)信息進(jìn)度序,在命令履行以前用戶一定知道正確的語法。有一種狀況,你想要在用戶履行程序的時候提示他輸入這些參數(shù)。read命令就是用來在程序履行的時候采集終端鍵入的信息。往常會使用echo命令來給用戶一個提示,讓他知道程序正在等候一些輸入,同時通知用戶應(yīng)當(dāng)輸入的種類。所以,每一個read命令應(yīng)當(dāng)在echo命令后邊。read命令會給出一個變量名的列表,用戶在提示符下輸入會給這些變量賦值(變量之間以空格分開)。假如read命令定義的變量比輸入的詞要多,多出的變量會被賦空值。假如用戶輸入的詞要比變量多,節(jié)余的數(shù)據(jù)會賦給列表中的最后一個變量。一旦被賦值,你就能夠象其余的shell變量相同存取這些變量。注意:不要混雜地點參數(shù)和變量read。地點參數(shù)在命令被激活時直接在命令行中使用,而read命令給變量賦值是在程序履行之中,用戶響應(yīng)輸入的提示而給變量賦值。1.7read命令(持續(xù))以下例子提示用戶輸入要被安裝的文件名:$cat>my_install3echo$0willinstallfilesintoyourbindirectoryecho“Enterc”readfilenamesmv$filenames$HOME/binechoInstllationiscompletectrl+d$chmod+xmy_install13$my_install13my_install13willinstallfilesintoyourbindirectoryEnterthenamesofthefiles->f1f2Installatoniscomplete這個安裝
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025高考數(shù)學(xué)考二輪專題過關(guān)檢測5 統(tǒng)計與概率數(shù)-專項訓(xùn)練【含答案】
- 機械工程中的機械表面處理規(guī)范要求
- 民主生活會征求意見表
- 關(guān)于質(zhì)量、工期、服務(wù)等方面的承諾及合理化建議
- 二零二五年度高鐵站燈箱廣告經(jīng)營權(quán)競拍合同3篇
- 二零二五年度股權(quán)眾籌項目分配協(xié)議書范本3篇
- 2024年清遠(yuǎn)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2024年海南軟件職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 語文S版六下《鯀禹治水》課件知識分享
- 資產(chǎn)監(jiān)督檢查研究報告
- GB/T 3077-2015合金結(jié)構(gòu)鋼
- GB/T 25003-2010VHF/UHF頻段無線電監(jiān)測站電磁環(huán)境保護(hù)要求和測試方法
- CB/T 369-1995鋼索開口滑車
- 英語音標(biāo)及辨音練習(xí)(精選)課件
- 小英雄雨來-讀后感700字
- 溝槽挖土方計算公式
- A320系列飛行訓(xùn)練課程:無線電導(dǎo)航概述
- 呼吸機波形分析以及臨床應(yīng)用
- 市政工程監(jiān)理規(guī)劃范本(完整版)
- 強力夯實加固地基質(zhì)量通病防治
- 《流體力學(xué)》課件
評論
0/150
提交評論