




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
shell編程shell編程簡介介紹shell編程目標(biāo):完成這一章,你能做以下事情:寫出簡單的shell程序 通過環(huán)境變量傳遞參數(shù)給shell程序 通過位置參數(shù)傳遞參數(shù)給shell程序 使用特殊shell變量,*和# 使用shift和read命令 1.1 shell編程概述shell程序是一個包含UNIX命令的普通文件。 這個文件的許可權(quán)限至少應(yīng)該為可讀和可執(zhí)行。 在shell提示符下鍵入文件名就可執(zhí)行shell程序。 shell程序可以通過三種方式接受數(shù)據(jù): 環(huán)境變量命令行參數(shù)用戶的輸入shell是一個命令解釋器,它會解釋并執(zhí)行命令提示符下輸入的命令。但是,你可能想要多次執(zhí)行一組命令,shell提供了一種功能,讓你將這組命令存放在一個文件中,然后你可以象unix系統(tǒng)提供的其他程序一樣執(zhí)行這個文件,這個命令文件就叫做shell程序或者shell腳本。當(dāng)你運(yùn)行這個文件,它會象你在命令行輸入這些命令一樣地執(zhí)行這些命令。為了讓shell能讀取并且執(zhí)行你的shell程序,shell腳本的文件權(quán)限必須被設(shè)置為可讀和可執(zhí)行。為了讓shell可以找到你的程序,你可以選擇輸入完全路徑名,或者將這個腳本的路徑放在于你的PATH環(huán)境變量指定的路徑列表中。許多的用戶會在他們的HOME目錄下創(chuàng)建一個bin目錄來存放他們自己開發(fā)的script,然后將$HOME/bin加入到他們的PATH環(huán)境變量中。你可以寫出非常復(fù)雜的shell腳本,因?yàn)閟hell腳本支持變量、命令行參數(shù)、交互式輸入、tests(判斷)、branches(分支),和loops(循環(huán))等復(fù)雜的結(jié)構(gòu)。1.2 shell程序舉例$ cat myprog#this is the program myprogdatels F$ myprog要創(chuàng)建一個shell程序,考慮進(jìn)行以下步驟:$ vi myprog 一個包含shell命令的程序。this is the program myprogdate ls F$ chmod +x myprog 增加文件的執(zhí)行模式$ myprogThu Jul 11 11:10 EDT 1994F1 f2 memo/ myprog*首先使用一個文本編輯器創(chuàng)建一個shell程序myprog。在程序執(zhí)行之前,這個文件必須被賦予可執(zhí)行的權(quán)限。然后在命令提示符下輸入這個程序名,如上例所示,當(dāng)myprog執(zhí)行的時候,一個子shell會被創(chuàng)建。這個子shell會從shell程序文件myprog讀取輸入而不是從命令行讀取輸入,這個shell中的每個命令的執(zhí)行都會創(chuàng)建一個子shell。一旦所有的命令都被執(zhí)行,所有的子shell會中止,然后會返回到原始的父shell。Shell程序中的注釋:推薦在shell程序中提供注釋語句來注明程序的內(nèi)容。注釋由一個#符號開始,Shell不會去執(zhí)行任何在之后的語句。#能夠出現(xiàn)在命令行的任何位置。注意:你不可以給shell程序取名為test因?yàn)閠est是一個內(nèi)部的shell命令。1.3 傳遞數(shù)據(jù)給shell程序$ color = lavender$ cat color1echo you are now running program: color1echo the value of the variable color is : $color$ chmod +x color1$ color1you ar now running program : color1the value of the variable color is :$ export color$ color1you are now running program : color1the value of the variable color is : lavender傳遞數(shù)據(jù)給shell腳本的一種方法就是通過環(huán)境。在上例中,本地變量color被賦值為lavender,然后創(chuàng)建了shell程序color1;然后更改為可執(zhí)行權(quán)限;然后這個shell程序被執(zhí)行,color1腳本的意圖是顯示color變量的值,但是由于color是一個本地變量,屬于父shell私有的,運(yù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。echo The original value of the variable color is $colorech0 This program will set the value of color to ambercolor=amberecho The value of color is now $colorecho When your program concludes,display the value of the color variable觀察在你設(shè)置了color的值后有什么變化。輸出這個變量,然后執(zhí)行color2:$ export color=lavender$ echo $colorlanvender$ color2The original value of the variable color is lavenderThe program will set the value of color to amberThe value of volor is now amberWhen your progam concludes, display the value of the color variable,$ echo $colorlanvender1.4 shell 程序的參數(shù)命令行:$ sh_program arg1 arg2 . . . argx$0 $1 $2 . $X例子:$ cat color3echo you are now running program: $0echo The value of command line argument #1 is: $1echo The value of command line argument #2 is : $2$ chmod +x color3$ color3 red green You are now running program: color3The value of command line argument #1 is : redThe value of command line argument #2 is: green大多數(shù)的UNIX系統(tǒng)命令可以接收命令行參數(shù),這些參數(shù)通常告訴命令它將要操作的文件或目錄(cp f1 f2),另外指定的參數(shù)擴(kuò)展命令的能力(ls l),或者提供文本字符串(banner hi there)。命令行參數(shù)對shell程序同樣有效,使用這種方式傳送信息給你的程序十分方便。通過開發(fā)一個接收命令行參數(shù)的程序,你可以傳遞文件或者目錄命令名給你的程序處理,就像你運(yùn)行UNIX系統(tǒng)命令一樣,你也可以定義命令行選項(xiàng)來讓命令行使用shell程序額外的功能。在shell程序中的命令行參數(shù)與參數(shù)在命令行的位置相關(guān),這樣的參數(shù)被稱為位置參數(shù),因?yàn)閷γ恳粋€特殊變量的賦值依靠一這些參數(shù)在命令行中的位置,變量的變量名對應(yīng)變量在命令行中的位置,因此這些特殊的變量名為數(shù)字0,1,2等,一直到最后的參數(shù)被傳遞,變量名的存取也通過同樣的方法,在名字前面加上$ 符號,因此,為了存取你的shell程序中的命令行參數(shù),你可以應(yīng)用$0,$1,$2等等。在$9以后,必須使用括號:$(10),$(11),否則,shell會將$10看成是$1后面跟一個0。而$0會一直保存程序或命令的名字1.4 shell程序的參數(shù)(繼續(xù))以下的shell程序會安裝一個程序,這個程序作為一個命令行參數(shù)被安裝到你的bin目錄:首先創(chuàng)建程序my_install,注意目錄$HOME/bin應(yīng)該預(yù)先存在。$ cat my_installecho $0 will install $1 to your bin directorychmod +x $1mv $1 $HOME/binecho Installation of $1 is completectrl + d$ chmod +x my_intalll$ my_install color3my_install will install color3 to your bin directoryInstallation of color3 is complete$這個例子中,程序指明第一個命令行參數(shù)為一個文件名,然后加上執(zhí)行權(quán)限,然后移動到你當(dāng)前目錄下的bin目錄下。記住UNIX系統(tǒng)的慣例是存貯程序在bin的目錄下。你也許想要在你的HOME目錄下創(chuàng)建一個bin目錄,在這個目錄下你可以存儲你的程序文件,記住要將你的bin目錄放在PATH環(huán)境變量中,這樣shell才會找到你的程序。1.5 一些特殊shell變量 和* # 命令行參數(shù)的數(shù)量* 完全的參數(shù)字符串例子:$ cat color4echo There are $comand line argumentecho They are $*ehco The first command line argument is $1$ chmod +x color4$ color4 red green yellow blueThey are 4 command line argumentsThey are red green yellow blueThe first command line argument is red$至今為止我們看到的shell程序都不是很靈活,如color3需要輸入兩個正確的參數(shù)而my_install只需要一個。通常在創(chuàng)建一個接收命令行參數(shù)的shell程序的時候,你想要用戶輸入一個參數(shù)的變量號碼。你同時要程序執(zhí)行成功,不管用戶鍵入1個參數(shù)或是20個參數(shù)。當(dāng)處理變量參數(shù)列表的時候,特殊shell變量會提供你許多的靈活性。通過$#你可以知道有多少參數(shù)已經(jīng)被輸入,通過$*可以存取全部的參數(shù)列表,而不管參數(shù)的數(shù)量。請注意參數(shù)($0)不在$*這個參數(shù)列表里。每一個命令行參數(shù)都是互相獨(dú)立的,你可以通過$*集中檢索這些參數(shù),也可以通過$1,$2,$3等等來獨(dú)立的檢索這些參數(shù)。1.5 一些特殊的shell變量和*(繼續(xù)) 一個可以接收多個命令行參數(shù)的安裝程序的例子: $ cat my_install2echo $0 will install $# files to your bin directoryecho The files to be installed are : $*chmod +x $*mv $* $HOME/binecho Installaton is completectril + d$ chmod +x my_install2$ my_install2 color1 color2my_intall2 will install 2 files to your bin directoryThe files to be installed are: color1,color2Intallaiton is complete這個安裝程序更加靈活,如果你有多個文件要安裝,你僅需要執(zhí)行這個程序一次,只要一次輸入多個名字即可。非常重要的是:如果你計劃傳遞整個參數(shù)的字符串給一個命令,這個命令必須能夠接收多個參數(shù)。在以下的腳本中,用戶提供一個目錄名作為一個命令行參數(shù)。程序會更改到指定的目錄,顯示當(dāng)前的位置,并且列出內(nèi)容。$ cat list_dir cd $*echo You are in the $(pwd) directoryecho The contents of the directory are:ls F$ list_dir dir1 dir2 dir3sh: cd: bad argument count由于cd命令不能同時進(jìn)入到多個目錄中,這個程序執(zhí)行會出錯。1.6 shift 命令 向左移動所有的在*中的字符串n個位置 #的數(shù)目減少n個(n的默認(rèn)值是1) 語法:shift n例子:$ cat color5orig_args=$*echo There are $# command line argumentsecho They are $*echo Shifting two argumentsshift 2echo There are $# comand line argumentsecho They are $*echo Shifting two argumentsshift 2; final_args=$*echo Original arguments are: $orig_argsecho Final arguments are: $final_argsshift命令會重新分配命令行參數(shù)對應(yīng)位置參數(shù),在shift n以后,所有的*中的參數(shù)會向左移動n個位置。同時$#會減n。默認(rèn)的n為1。Shift命令不會影響到參數(shù)0的位置。一旦你完成一次移動,被移出命令行的參數(shù)會丟失。如果你想在你的程序中引用這個參數(shù),你需要在執(zhí)行shift之前存貯這個參數(shù)到一個變量中。Shift命令可以用于:存取一組參數(shù)的位置,例如一系列的x,y的坐標(biāo) 從命令行刪除命令選項(xiàng),假定選項(xiàng)在參數(shù)之前。 例子: $ color5 red green yellow orange blackThere are 6 command line argumentsThey are red green yellow blue orange blackShifting two argumentsThere are 4 command line argumentsThey are yellow blue orange blackShiftging two argumentsOriginal arguments are: red green yellow blue orange blackFinal argument are : orange black$1.7 read 命令語法:read variable variable.例子:$ cat color6echo This program prompts for user inputecho “please enter your favorite two colors - c”read color_a color_becho The colors you entered are: $color_b $color_a$ chmod +x color6$ color6This program prompts for user input Please enter your favorite two colors - red blueThe colors you entered are: blue red$ color6This program prompts for user inputPlease enter you favorite two colors - red blue tanThe color you enterd are :blue tan red如果使用命令行參數(shù)傳遞信息進(jìn)程序,在命令執(zhí)行之前用戶必須知道正確的語法。有一種情況,你想要在用戶執(zhí)行程序的時候提示他輸入這些參數(shù)。read命令就是用來在程序執(zhí)行的時候收集終端鍵入的信息。通常會使用echo命令來給用戶一個提示,讓他知道程序正在等待一些輸入,同時通知用戶應(yīng)該輸入的類型。因此,每一個read命令應(yīng)該在echo命令后面。read命令會給出一個變量名的列表,用戶在提示符下輸入會給這些變量賦值(變量之間以空格分隔)。如果read命令定義的變量比輸入的詞要多,多出的變量會被賦空值。如果用戶輸入的詞要比變量多,剩余的數(shù)據(jù)會賦給列表中的最后一個變量。一旦被賦值,你就可以象其他的shell變量一樣存取這些變量。注意:不要混淆位置參數(shù)和變量read。位置參數(shù)在命令被激活時直接在命令行中使用,而read命令給變量賦值是在程序執(zhí)行之中,用戶響應(yīng)輸入的提示而給變量賦值。1.7 read命令(繼續(xù))以下例子提示用戶輸入要被安裝的文件名:$ cat my_install3echo $0 will install files into your bin directoryecho “Enter the names of the files - c”read filenamesmv $filenames $HOME/binecho Instllation is completectrl + d$ chmod +x my_install13$ my_install13my_install13 will install files into your bin directoryEnter the names of the files - f
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司每月娛樂活動方案
- 公司組織義工活動方案
- 公司組建舞蹈隊(duì)活動方案
- 公司研學(xué)策劃方案
- 公司組織燒烤策劃方案
- 公司派對活動方案
- 公司節(jié)后收心會活動方案
- 2025年心理健康教育輔導(dǎo)考試試題及答案
- 濱海生態(tài)補(bǔ)償機(jī)制-洞察及研究
- 2025年食品科學(xué)與工程專業(yè)考試試卷及答案
- 映秀灣水電廠一次系統(tǒng)課程設(shè)計
- 碳排放管理師考試復(fù)習(xí)題庫
- 叉車自檢報告(柴油叉車)
- 2022年河南項(xiàng)城市事業(yè)單位引進(jìn)緊缺高層次人才16名筆試備考題庫及答案解析
- 2023年無錫宜興市小升初英語考試模擬試題及答案解析
- 沃爾瑪收貨規(guī)定
- 小學(xué)道德與法治人教五年級上冊(統(tǒng)編)第三單元我們的國土我們的家園-愛國教案
- GB∕T 2518-2019 連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 土地項(xiàng)目測算表_模板
- 教育培訓(xùn)機(jī)構(gòu)輔導(dǎo)老師月度績效考核表(KPI)
- 立式水輪機(jī)組軸線調(diào)整及導(dǎo)軸承的間隙分配ppt課件
評論
0/150
提交評論