實(shí)訓(xùn)5-Linux-shell編程匯總_第1頁(yè)
實(shí)訓(xùn)5-Linux-shell編程匯總_第2頁(yè)
實(shí)訓(xùn)5-Linux-shell編程匯總_第3頁(yè)
實(shí)訓(xùn)5-Linux-shell編程匯總_第4頁(yè)
實(shí)訓(xùn)5-Linux-shell編程匯總_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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)介

1、精品資料可編輯實(shí)訓(xùn)五Li nux shell 編程【實(shí)習(xí)目的】掌握Linux shell的基本編程,包括:編程、調(diào)試與應(yīng)用【實(shí)習(xí)指導(dǎo)】一、shell編程簡(jiǎn)介L(zhǎng)inux shell是一個(gè)命令解釋器,用來(lái)接受并執(zhí)行命令(包括運(yùn)行批處理文件和執(zhí)行程序) 。 shell環(huán)繞在內(nèi)核的外層,它是Linux操作系統(tǒng)和用戶之間的界面。 當(dāng)用戶從shell或其他程序 向Linux傳遞命令,內(nèi)核會(huì)做出相應(yīng)的反應(yīng)。這里,將介紹 Linux下最常用的 shellbash。bash( Bourne Again Shell)是大多數(shù)Linux發(fā)行套件的缺省shell,并被大多數(shù)用戶所使用。在命令行輸入命令時(shí),每次輸入一個(gè)

2、命令,就可得到系統(tǒng)的響應(yīng)。但如果經(jīng)常要依次執(zhí)行同一組命令,就可以利用shell程序來(lái)實(shí)現(xiàn)。shell程序是放在一個(gè)文件中的一系列的Linux命令。執(zhí)行shell程序時(shí),由Linux逐條解釋和執(zhí)行每個(gè)命令。二、shell程序文件shell程序文件是一個(gè)特殊的文本文件,其內(nèi)容包含一系列可在shell提示符下執(zhí)行的命令,以及shell提供的專用的命令和控制語(yǔ)句。 Linux提供的shell命令可通過(guò)命令 help來(lái)獲 得,在shell提示符下,鍵入命令help | more ”,圖5-1所示是獲得所有 shelI命令的列表的 一部分。raotlocalhost /root# help|mereGMU

3、 bash, version 1.14.7(1)Shell comnands 七h(yuǎn)at are defined 丄nternalltl* Type help to see th Ls listtType rheLp rtane* to find uurt nore about the function ename3 *Use info bash3 t口 find out more 日bout the shell in general.H star (*) next t口 name means that the connand is disabledsSDIGFS | WORD +4-+ fil

4、enaitiealias name=value :b job_specbird 一丄vd -m keycap -F fllena break LN _bulltin shell-buLltin arg: + case L1OPD in PATTERN | PAHEcd dircortinuB n More|cominand -pVv cumnand arg * declare -frwi riawp=value圖5-1如要獲得其中命令 echo的詳細(xì)幫助信息,則在shell提示符下,鍵入命令help echo”, 便獲得該命令的詳細(xì)使用信息如圖5-2所示。rootLocalhast /root

5、# help echo echo; echo -neE argsuppressedt LF the e option is given, iriterpretation of theOutput the ARGs, If -n Is specified, the trailing newline isfollou i隔abcbacks lash-escaped chapactens 13 tunned on:alert (bell) b 曰匚 kspace suppress trailing newline form feednew line canriase mt urn horizonta

6、l vertical tab b目亡kslashthe character whose ASCII code is HUM (octal)亠You can explicitly turn off the interpretation of the above ch aractarsiiiith the -E opt ionrootSlocalhast /noot# I圖5-2圖中可觀察到,該命令的功能是在屏幕上輸出給定的信息。 shell程序文件的運(yùn)行過(guò)程是將 shell程序文件中的命令依次執(zhí)行。三、shell程序的建立shell程序文件可用任何一個(gè)文件編輯器(如vi)來(lái)建立。例如,建立she

7、ll程序shexl,存放在當(dāng)前目錄下(假定當(dāng)前目錄為/root),程序功能為先清屏,然后顯示 98年的1、2、3月份的月歷。程序文件內(nèi)容如下:clearcal198cal298cal398用vi編輯器建立shell程序文件shexl的方法如下:(1)鍵入命令vi shexl”,啟動(dòng)vi;(2)按命令“ i”,進(jìn)入vi的插入狀態(tài);(3)輸入程序文件內(nèi)容;(4)按鍵,再鍵入“:”,切換到vi的命令狀態(tài);(5) 最后鍵入命令“ wq ”,保存文件內(nèi)容后,退出vi。 至此,shell程序文件shex1已建立。四、shell程序的運(yùn)行運(yùn)行shell程序有兩種方法:一種是在shell環(huán)境下,將shell程

8、序文件作為子 shell程序被調(diào)用執(zhí)行;另一種是將shell程序文件視作命令來(lái)執(zhí)行(因此,shell程序文件可以看作是將各種命令組合在一起而形成的新命令),此時(shí)必須賦予shell程序文件執(zhí)行權(quán)限。方法一:sh 方法二:【例如】分別用兩種方法運(yùn)行已建立的shell程序文件shexl。方法一:在shell提示符下,鍵入命令:“ sh shexl”。方法二:(1)首先,給shell程序文件shexl賦予可執(zhí)行權(quán)限,則在 shell提示符下,鍵入命令:“ chmod a+x shexl”;(2) 然后,在shell提示符下,鍵入命令/root/shexl ”便可執(zhí)行該shexl程序,如同 其他shel

9、l命令一樣。兩種方法的運(yùn)行結(jié)果,如圖5-3所示。January 98SuriaTu雇ThFrSa145678101112131415IE171819202122232425262728293031February 98SuHoTuNeThFrSa4567W11121314151617IE19202122232425262728March98SuMoTuMeThFrSa12345678910111213141516171819202122232425262728293031roatloc;alhost /root# |圖5-3運(yùn)行命令中有參數(shù)和沒(méi)有參數(shù)的情況分別稱為帶參數(shù)的運(yùn)行命令和不帶參數(shù)的運(yùn)

10、行命令。在shell程序中可使用的形參為 $0、$1、$2、$9,當(dāng)程序運(yùn)行時(shí), 依次賦值給$1、$2、,通常稱運(yùn)行命令中所帶的參數(shù)為實(shí)參。$0是一個(gè)特殊的形參,其值規(guī)定為當(dāng)前運(yùn)行的shell程序命令本身。由于形參個(gè)數(shù)有限,當(dāng)參數(shù)較多時(shí),可通過(guò)命令shift來(lái)移動(dòng)形參與實(shí)參的對(duì)應(yīng)關(guān)系,執(zhí)行一次shift后,$1、$2、變?yōu)橐来闻c 對(duì)應(yīng),再執(zhí)行一次shift后,$1、$2、變?yōu)橐来闻c 對(duì)應(yīng),依此類推。通過(guò)下面的例子shell程序shex2,可觀察參數(shù)的移動(dòng)變化。shex2程序文件內(nèi)容如下:echo $0 $1$2shiftecho $0 $1$2運(yùn)行的命令所帶參數(shù)及運(yùn)行結(jié)果如圖5-4所示。roo

11、tlo亡mlh蘭t/root/shei2 yestarclsy today taifloiroiii/root/she2 yesterday today/root/shes:2 today t_omorrowrootlocalhost /poot |圖5-4圖中可觀察到,$0的值始終是當(dāng)前運(yùn)行的shell程序命令本身,即/root/shex2。例如,將shexl程序用參數(shù)形式進(jìn)行改寫(xiě),程序功能保持不變,最后將程序保存為 shex3,存放在當(dāng)前目錄下。shex3程序文件內(nèi)容如下:clearcal$198cal$298cal$398運(yùn)行的命令所帶參數(shù)及運(yùn)行結(jié)果分別如圖5-5所示。rootlloes

12、lhost /root /roovshaS 10 11 12 October 98SuMoNov an herTlj kb Th11182551219268 5 2 912 2 T 4 1 312 212 29SFr28162330Sa3101724SuMoTuHeThFrSa234567S101112131416ITIE1920212324252627283031Eecetiher 98Su Mo Tu Ne Th Fr Sa12 3456789 10111213141516 17IS1920212223 24252527冏2930 31rootlocalhost /roott |圖5-5當(dāng)

13、帶參數(shù)的運(yùn)行命令為/root/shex3 1 2 3”,則運(yùn)行結(jié)果顯示如圖 4-6所示。注意,當(dāng)實(shí)參為空時(shí),形參將被傳遞空值。五、變量Linux的shell程序中允許使用各種類型的變量,主要有系統(tǒng)、內(nèi)部和用戶變量三種。系統(tǒng)變量也稱環(huán)境變量,它與用戶變量的區(qū)別在于它可將值傳給shell運(yùn)行的其他命令或shell程序使用,亦即系統(tǒng)變量是全局變量。內(nèi)部變量是由系統(tǒng)提供,與環(huán)境變量不同,用戶不能修改用戶變量由用戶定義的變量,是當(dāng)前shell的局部變量,不能被 shell運(yùn)行的其他命令或shell程序使用,亦即用戶在 shell程序中定義的程序變量只在程序運(yùn)行時(shí)有效,一旦退出, 這些變量自動(dòng)失效。通過(guò)s

14、hell提供的命令set,可以查看當(dāng)前shell下定義的一系列變量及其值。例如,在shell提示符下,鍵入命令set | more ”,顯示當(dāng)前shell下定義的變量及其值如圖5-6所示。rootlocalhost /root# set | more BASH=/bin/ba曲 BASH_ERSION=114.7(1)BROUSER/usr/bin/netscape COL0PFGBG=0;defauIt;15 COLORTERnvt-Hpm coluhnssoDISPLAV-;OtOEHV=/root/ tbashrcEUIE=OHISTFILE=/root/+bash_histonyHIS

15、TFILESIEE=1OOOHISTSIZE=1000HOMErootHOSTDISPLjA Y=local h ost .Laea ldahi aintO.O HOSTTNAMElocalhost+localdoniairi H0STTVPE=i386IFS-LINEH2GLOGhlfflE=nootMAIL=/var/spoo1/nail/rootMAILCHECK=60OPTERR=1OPTINB=1Here-|圖5-61變量賦值格式: =功能:將等號(hào)右邊的字符串賦給等號(hào)左邊的變量,即右邊的字符串為左邊變量的值。說(shuō)明,任何不含空格的字符串都可作變量名。若字符串中含有空格,則在字符串上加上

16、引號(hào)。例如,要求定義一個(gè)用戶變量namel,并給變量賦值為MARY ”,則在shell提示符下,鍵入命令“ name1=MARY ”。例如,要求定義一個(gè)用戶變量name2并給變量賦值為X Window ”,則在shell提示符下,鍵入命令name2=X Window ”。2、引用變量格式:$變量名 功能:引用變量的值。例如,要求將變量namel的值賦給變量name2,則在 shell提示符下,鍵入命令n ame2=$ namel”。例如,要求在屏幕上顯示變量namel的值,則在 shell提示符下,鍵入命令echo$n amel”。3、釋放變量格式:unset 變量名功能:釋放一個(gè)現(xiàn)存的she

17、ll變量。例如,要求釋放變量 namel,則在shell提示符下,鍵入命令unset namel”。變量的定義、賦值及引用過(guò)程如圖5-7所示。nootOlocalhost /root;4 nafnel=MARrootOlocalhost /roo禪 echo 3nanslVo otQ local host /root;禪 urisert nameln)at(9 local host /root和圖5-7六、shell程序的控制流與其他高級(jí)語(yǔ)言一樣,shell編程中也提供了條件與循環(huán)等控制結(jié)構(gòu),下面介紹bash提供的主要的程序控制結(jié)構(gòu)語(yǔ)句。1、條件控制流(1)if-then-else 結(jié)構(gòu)if條

18、件判斷命令then 命令集1 else 命令集2fi其中, 條件判斷命令 通常是“ test 表達(dá)式 ”,當(dāng)條件成立,則返回 0;條件不成 立,則返回一個(gè)非 0值。執(zhí)行過(guò)程說(shuō)明:當(dāng) 條件判斷命令 返回0時(shí),則執(zhí)行then后的 命令集1,然后執(zhí)行 fi后面的命令;否則執(zhí)行else后的 命令集2,然后執(zhí)行fi后面的命令。在if-then-else結(jié)構(gòu) 中,允許在then和else后的命令集中包含if-then-else結(jié)構(gòu),即允許嵌套。需要強(qiáng)調(diào)的是其中if和fi必須配對(duì)出現(xiàn)。(2)if-then-fi 結(jié)構(gòu)if then fi執(zhí)行過(guò)程說(shuō)明:當(dāng) 返回0時(shí),則執(zhí)行then后的 ,然后執(zhí)行fi 后面的命

19、令,否則執(zhí)行 fi 后面的命令。(3)case結(jié)構(gòu)case in 字符串 1) J J字符串 n) *)esac其中,字符串中可含通配符。執(zhí)行過(guò)程說(shuō)明:程序?qū)?的值依次和字符串1、字符串2、字符串n進(jìn)行比 較,哪個(gè)匹配,則執(zhí)行后面的 ;若都不匹配,則執(zhí)行 。說(shuō)明,如果能同時(shí)匹配多個(gè)字符串,則只能執(zhí)行第一個(gè)匹配字符串后的。2、循環(huán)控制流 ( 1 ) for-in 結(jié)構(gòu)for in dodone其中, 中的值與值之間用空格分隔。執(zhí)行過(guò)程說(shuō)明:程序從 中依次取值,賦給 ,并執(zhí)行一輪 由 do 和 done 括起來(lái)的循環(huán)體中的 ,直到 中的值取完,再執(zhí)行 done 后面的命令。若“in ”缺省,則 為

20、實(shí)參集。( 2)while 結(jié)構(gòu)while dodone執(zhí)行過(guò)程說(shuō)明:當(dāng) 條件判斷命令 返回0時(shí),則執(zhí)行一輪由 do和done括起來(lái)的循環(huán) 體中的 命令集 ,直到 條件判斷命令 返回一個(gè)非 0值時(shí),則不再執(zhí)行循環(huán)體中的命令, 執(zhí)行 done 后面的命令。(3)until 結(jié)構(gòu)until 條件判斷命令 do 命令集 done執(zhí)行過(guò)程說(shuō)明:與 while 結(jié)構(gòu)相反,當(dāng) 條件判斷命令 返回非 0 時(shí),執(zhí)行循環(huán)體中的 命令,直到 條件判斷命令 返回一個(gè) 0 值時(shí),繼續(xù)執(zhí)行 done 后面的命令。3、條件判斷命令 test條件表達(dá)式是控制程序流程的關(guān)鍵,shell提供的test命令可組合多個(gè)表達(dá)式,生成

21、功能靈活的條件表達(dá)式,使 shell程序的功能更強(qiáng),下面介紹test命令的基本使用。格式:test 表達(dá)式 功能:test命令返回表達(dá)式成立與否的狀態(tài)值,如果表達(dá)式成立,則test返回真的狀態(tài)值0,否則,test返回假的狀態(tài)值,即一個(gè)非 0值。test命令中的 表達(dá)式 常見(jiàn)的有以下幾 類:(1)文件特性類-e 文件名 : 檢查文件名 存在否,若存在,返回真值;否則返回假值。-f 文件名 : 檢查文件名 是否是普通文件,若是,返回真值;否則返回假值。-d 文件名 :檢查文件名 是否是目錄,若是,返回真值;否則返回假值。-r 文件名 : 檢查文件名 是否可讀,若是,返回真值;否則返回假值。-w 文

22、件名 :檢查文件名 是否可寫(xiě),若是,返回真值;否則返回假值。-x 文件名 : 檢查文件名 是否可執(zhí)行,若是,返回真值;否則返回假值。-s 文件名 :檢查文件名 是否存在且文件長(zhǎng)度大于零,若是,返回真值;否則返回假值。文件名1- nt 文件名2 :如果文件名 1比文件名 2新(根據(jù)文件最后修改時(shí)間判斷) ,返回真值;否則返回 假值。文件名1- ot 文件名2 :若文件名 1比文件名 2舊(根據(jù)文件最后修改時(shí)間判斷) ,返回真值; 否則返回假值。文件名1- ef 文件名2 :如果 文件名1和 文件名2有相同的設(shè)備名和inode號(hào),返回真值;否則返回假值。(2)字符串類 -z 字符串 :如果字符串

23、長(zhǎng)度為零,返回真值;否則返回假值。-n 字符串 :如果字符串 長(zhǎng)度不為零,返回真值;否則返回假值。字符串 1 = 字符串 2: 如果字符串 1與字符串 2相等,返回真值;否則返回假值。字符串 1 != 字符串 2: 如果字符串 1與字符串 2不相等,返回真值;否則返回假值。(3)與或表達(dá)式類! 表達(dá)式 : 如果表達(dá)式 為假,則返回真值;否則返回假值。表達(dá)式 1- a 表達(dá)式 2 :表達(dá)式 1、表達(dá)式 2進(jìn)行與操作,若 表達(dá)式 1、表達(dá)式 2均為真,則返回真 值;否則返回為假值。表達(dá)式 1- o 表達(dá)式 2 :表達(dá)式 1、表達(dá)式 2進(jìn)行或操作,若 表達(dá)式 1、表達(dá)式 2均為假,則返回假 值;否則

24、返回真值。(4)數(shù)值表達(dá)式類數(shù)值表達(dá)式1- eq 數(shù)值表達(dá)式2 :如果數(shù)值表達(dá)式 1等于數(shù)值表達(dá)式 2,則返回真值;否則返回假值。數(shù)值表達(dá)式1- ne 數(shù)值表達(dá)式2 :如果數(shù)值表達(dá)式 1不等于 數(shù)值表達(dá)式 2,則返回真值;否則返回假值。數(shù)值表達(dá)式1- It 數(shù)值表達(dá)式2 :如果數(shù)值表達(dá)式 1小于數(shù)值表達(dá)式 2,則返回真值;否則返回假值。數(shù)值表達(dá)式1- le 數(shù)值表達(dá)式2 :如果數(shù)值表達(dá)式 1 小于或等于 數(shù)值表達(dá)式 2,則返回真值;否則返回假值。數(shù)值表達(dá)式1- gt 數(shù)值表達(dá)式2 :如果數(shù)值表達(dá)式 1大于數(shù)值表達(dá)式 2,則返回真值;否則返回假值。數(shù)值表達(dá)式1- ge 數(shù)值表達(dá)式2 :如果數(shù)值表

25、達(dá)式 1 大于或等于 數(shù)值表達(dá)式 2,則返回真值;否則返回假值。七、shell程序調(diào)試簡(jiǎn)介有兩種簡(jiǎn)便的跟蹤功能可以用于shell程序的調(diào)試,即在shell程序中加入命令 set -v或set -x。格式 1 set -v功能 當(dāng)執(zhí)行一個(gè) shell 程序時(shí),會(huì)在執(zhí)行程序文件中的每條命令之前,自動(dòng)在屏幕上 先顯示該條命令。格式 2 set -x功能:當(dāng)執(zhí)行shell程序時(shí),它會(huì)把將要執(zhí)行的命令逐條進(jìn)行參量定值,并以最后執(zhí)行 的形式在屏幕上顯示。八、實(shí)例1編寫(xiě)shell程序文件shpl,存放在當(dāng)前目錄下,程序功能要求如下:如果/etc目錄中的文件profile存在,則將其復(fù)制到fdO盤的根目錄中,

26、并分屏顯示 fdO 盤上的profile文件內(nèi)容;否則在屏幕上顯示信息profile is not exist!”。(1)用vi創(chuàng)立shell程序文件shpl,程序如下:if test -e /etc/profilethe n cp /etc/profile /mn t/floppy cat /mnt/floppy/profile|more rm -f /mn t/floppy/profileelse echo profile is not exist! fi(2)用兩種方法運(yùn)行程序shp1方法一:在shell提示符下,鍵入命令sh shp1”。方法二: 給程序文件賦予可執(zhí)行屬性“X ”在sh

27、ell提示符下,鍵入命令“chmod a+x shp1” 運(yùn)行程序在shell提示符下,鍵入命令“ /root/shp1 ”觀察運(yùn)行結(jié)果,若文件profile存在,則屏幕顯示如圖 5-8 所示,若文件profile不存在,則屏幕顯示如圖5-9所示。# /etc/ppofile卡 System wide environment 臼nd startup prograns卡 Functions and aliases go in /etc/bashrcPAI掃細(xì)PATH t/ugr/XllR6/binv FSl=MuQh & a,uliKiit -c 1000000if id -gnc = id -

28、un -a *id -uc -gt 14 ; then u師sk 002umssk 022fiNone-1圖5-8 profile is not exist! rootlocalhost. /root # |圖5-92、編寫(xiě)shell程序文件shp2,存放在當(dāng)前目錄下,程序功能要求如下: 用for命令實(shí)現(xiàn),在當(dāng)前目錄下創(chuàng)建名為userO userl、user2、user9十個(gè)子目錄后,用長(zhǎng)格式顯示這十個(gè)目錄的目錄信息,然后用for命令刪去這十個(gè)目錄后,再用長(zhǎng)格式顯示這十個(gè)目錄的目錄信息。(1)用vi創(chuàng)立shell程序文件shp2,程序如下:for i in 0 1 2 3 4 5 6 7 8

29、9 do mkdir user$i donels -dl user? |morefor i in 0 1 2 3 4 5 6 7 8 9do rm -rf user$idonels -dl user? | more(2)用兩種方法運(yùn)行程序shp2方法一:在shell提示符下,鍵入命令sh shp2”。 方法二:給程序文件賦予可執(zhí)行屬性“X ”在shell提示符下,鍵入命令“chmod a+x shp2”運(yùn)行程序在shell提示符下,鍵入命令“/root/shp2 ”觀察運(yùn)行結(jié)果,屏幕顯示如圖5-10所示。drti)一沢2 rootroot1024May 27 05:17 userO2 root

30、root1024May 27 05:47 userldr xr-HLx2 rootroot1024May 27 05:47 user2d wr-r-w7 rootroot1024May 27 05:47 us:er3dru2 rootroot1024May 27 05:47 usen4drw wr-xr-x2 rootroot1024May 27 05:47 userSdrw2 rootroot1024Nay 27 05:47 userG2 rwt1024Nay 27 05:47 user72 rQQtroQtLQ24Nay 2T 05:47 userSdrwwr-wr2 rwtro 口 t1

31、024May 2T 05:17 userS1st user1*!No such fLieor directoryrooWlocalhost /root 4 |圖 5-103、編寫(xiě)shell程序文件shp3,存放在當(dāng)前目錄下,程序功能要求如下:如果shp3運(yùn)行時(shí)未帶參數(shù),則在屏幕上顯示信息 Parameter Lost!”,并結(jié)束程序運(yùn)行; 如果shp3運(yùn)行時(shí)帶一個(gè)參數(shù),則判斷參數(shù)所指定的文件是否存在,如果存在則復(fù)制該文件 到fdO盤的根目錄;否則先在屏幕上顯示信息File not found!”,然后顯示程序自身。(1)用vi創(chuàng)立shell程序文件shp3,程序如下:if test-z $1t

32、he nechoParameterLost!elseiftest-e$1the ncp$1/mn t/floppyelse echo File not found!cat $0fifi(2)用兩種方法運(yùn)行程序 shp3 方法一:在shell提示符下,鍵入命令sh shp3”。方法二: 給程序文件賦予可執(zhí)行屬性“chmod a+x shp3”/root/shp3 ”在shell提示符下,鍵入命令“ 運(yùn)行程序在shell提示符下,鍵入命令“測(cè)試并觀察程序運(yùn)行結(jié)果,若鍵入命令“sh shp3”,則運(yùn)行結(jié)果顯示如圖5-11所示;若鍵入命令“ sh shp3 shp1”,則運(yùn)行結(jié)果顯示如圖 5-12所示

33、;若鍵入命令“ sh shp3 sx” (其中,sx參數(shù)所指定的文件是一個(gè)不存在的文件),則運(yùn)行結(jié)果顯示如圖5-13所示。roots local hostsh shp3Pananeter Lost!roo+localhost /roo+2 I圖 5-11rootlncalhast /root sh shp3 shplYootQlocalhost /root# Is 1 /mnt/f loppij/shpl-rhjr-Kr-s 1 root root161 Nay 27 06:08 /mnt/floppy/shp 1rootQlocalhost /root |圖 5-12roc+lotalhos

34、t# sh shp3 swFile not found!if test -z $1 then echo Parametwr Lost!else if test -e $1 then qo $1 /mnt/floppyecho File not found! cart $0 Fi finnotLoeslhast /root# |圖 5-134、編寫(xiě)shell程序文件shp4,存放在當(dāng)前目錄下,程序功能要求如下:如果shp4運(yùn)行時(shí)未帶參數(shù),則在屏幕上顯示信息 “ ERR0R1” ;如果shp4運(yùn)行時(shí)只帶一 個(gè)參數(shù),則在屏幕上顯示信息“ ERR0R2 ”;如果帶兩個(gè)不同的參數(shù)且參數(shù) 1所指定的文件

35、存在,則將參數(shù)1所指定的文件復(fù)制到fdO盤的根目錄中,并改名為參數(shù)2所指定的文件名。(1)用vi創(chuàng)立shell程序文件shp4,程序如下:iftest-z $1the nechoERROR1elseif test-z $2the necho 1ERROR2elseif test$1!=$2 -a -e $1the ncp$1 /mnt/floppy/$2fififi(2)用兩種方法運(yùn)行程序shp4方法一:在shell提示符下,鍵入命令“ sh shp4”。方法 給程序文件賦予可執(zhí)行屬性“chmod a+x shp4”/root/shp4 ”在shell提示符下,鍵入命令“ 運(yùn)行程序在shell

36、提示符下,鍵入命令“測(cè)試程序,若鍵入命令 “sh shp4 shp1 test1”、“cat shp1”、“ cat /mnt/floppy/test1 ”, 則運(yùn)行結(jié)果顯示如圖5-14所示。rootOlocalhost /root# sh shp-4 shpl temtl rootlocalhost /root # cat shpl if test -巳 /etc/profilethe門 cp /etc/pro-file /inrrt/-floppy cat /mnt/f loppy/pr(jfile|RQre rm -f /int/floppy/prof i le else echo pr

37、ofile is not ewist! 訂roctOlacalhost /root # cat /m nt/floppy/tes 11 If test -e /etc/profilethe門 cp /etc/profile /mnt/flciDfdd eatlappy/praflie norepm -f /mt/f loppy/prof i le else echo prafile is mt eist! 4Vaotlacaihost /root# |圖 5-14圖中可觀察到,fd0盤上的復(fù)制文件的內(nèi)容test1與原文件shp1的內(nèi)容完全一致。5、編寫(xiě)shell程序文件shp5,存放在當(dāng)前目錄

38、下,程序功能要求如下:清屏 當(dāng)程序運(yùn)行時(shí),屏幕顯示如下形式的信息:* This is a shell program for renaming and * 檢查在 fd0 盤的根目錄中,是否存在由參數(shù) 1 指定的文件,若不存在,則屏幕顯示 信息“ File not found! ”;若存在則將參數(shù) 1 指定的文件改名為由參數(shù) 2 指定的文件名,然 后用 for 命令對(duì)改名后的文件顯示長(zhǎng)格式的目錄信息和文件內(nèi)容。clearecho echo(1) 用vi創(chuàng)立shell程序文件shp5,程序如下:11*”* This is a shell program for nameing . *11*if

39、test -n $1 -a -n $2then if test $1!=$2then if test -e $1then mv $1$2for cn in ls -l cat do$cn $2echo donefielse echo File not found!fifi(2) 用兩種方法運(yùn)行程序shp5方法一:在 shell 提示符下,鍵入命令“ sh shp5”。 方法二: 給程序文件賦予可執(zhí)行屬性“ X”chmod a+x shp5”/root/shp5 ”在 shell 提示符下,鍵入命令“ 運(yùn)行程序在 shell 提示符下,鍵入命令“測(cè)試程序,若鍵入命令/root/shp5 shpl

40、 abc”觀察到的運(yùn)行結(jié)果如圖5-15所示。* This is a shell program for naneing *韋* *束* * *嗦*北*荒* * *素傘朮*宗*東*岀4!:豐水未誹索勒* *束-廠w-r-1 root root1G1 May 羽 11120 abcif test -e /et匚/匚inf i 丄旦then cp /mtc/profile /nnt/flci|3p尅 cat /nnt/floppy/profile 間口曰 rn -f /m nt/f1oppy/pro file else echo profile is not DMist!flrootloclhosf

41、 /root# |圖 5-156、編寫(xiě)shell程序文件shp6,存放在當(dāng)前目錄下,程序功能要求如下:運(yùn)行程序shp6時(shí)帶一個(gè)正整數(shù)參數(shù),將參數(shù)值存入變量 value中,如果該參數(shù)大于等于1但小于3,則在屏幕上顯示信息 Value is less than 3 and not less than 1 ”;如果該參數(shù)大于 等于3,則在屏幕上顯示信息 Value is not less than 3.”;最后以value=xx”的形式顯示變 量value的值。(1)用vi創(chuàng)立shell程序文件shp5,程序如下:if test$1 -ge 1-a$1 -lt 3the nvalue=$1echo

42、valueislesstha n3 and not less than 1fiif test$1 -ge 3the nvalue=$1echo valueisnotlessthan 3fiecho value=$value(2)用兩種方法運(yùn)行程序shp6方法一:在shell提示符下,鍵入命令sh shp6”。 方法二: 給程序文件賦予可執(zhí)行屬性“chmod a+x shp6”/root/shp6 ”在shell提示符下,鍵入命令“ 運(yùn)行程序在shell提示符下,鍵入命令“測(cè)試程序并觀察運(yùn)行結(jié)果如圖5-16所示。rootlocalhost /rootsh shpC 2value is Less

43、than 3 and not less than 1 value=2rootlSlocalhost /root if |圖 5-167、編寫(xiě)shell程序文件shp7,存放在當(dāng)前目錄下,程序功能要求如下:如果shell程序文件的文件名不為 testO,并且當(dāng)前目錄中不存在 testO文件,則將本shell 程序文件的名字改為testO,若當(dāng)前目錄中存在testO文件,則先刪除,再將本 shell程序文件 的名字改為testOo(1)用vi創(chuàng)立shell程序文件shp7,程序如下:echo File name must be testO.if test $O != testOthe nif te

44、st -e testOthe n rm -f testOfimv $0 testOfi(2)用兩種方法運(yùn)行程序shp7方法在shell提示符下,鍵入命令sh shp 7方法二:chmod a+x shp 7/root/shp 7” 給程序文件賦予可執(zhí)行屬性“ 在shell提示符下,鍵入命令“ 運(yùn)行程序在shell提示符下,鍵入命令“測(cè)試程序并觀察運(yùn)行結(jié)果顯示如圖5-17所示。rootfilocalhost /pool# sh shpT Filename nust be testO rnctlccalhost /root# cat testO echo Filename must be test

45、O if t&st $0 != tSEtOthenif test -e testO then rn test。fimv SO testOfirootlocalhost /root# Is shpT .s: shp7: No such file or directory Y-QotLaca止口就 /root# |圖 5-178、編寫(xiě)shell程序文件shp8,存放在當(dāng)前目錄下,程序功能要求如下:判斷fdO盤的根目錄下是否存在子目錄dir1和dir2,若不存在,則先建立它們;若存在,則分別刪除目錄下的文件 dlist和flist。然后將/home目錄下所有目錄文件的目錄信息,以長(zhǎng) 格式形式保存到f

46、dO盤的dir1子目錄下的文件dlist中;將/home目錄下的所有文件的目錄信 息,以長(zhǎng)格式形式保存到fdO盤的dir2子目錄下的文件flist中。(1)用vi創(chuàng)立shell程序文件shp8,程序如下:if test-d/mn t/floppy/dir1the nmkdirelse rm -f fi/mn t/floppy/dirl/mn t/floppy/dlistif test ! -d/mn t/floppy/dir2the n mkdir /mn t/floppy/dir2else rm -f /mnt/floppy/flistfils -dl /home /mn t/floppy/

47、dir1/dlistls -l /home /mn t/floppy/dir2/flist(2)用兩種方法運(yùn)行程序shp8方法一:在shell提示符下,鍵入命令sh shp8”。方法二: 給程序文件賦予可執(zhí)行屬性“X ”在shell提示符下,鍵入命令“ chmod a+x shp8” 運(yùn)行程序在shell提示符下,鍵入命令“ /root/shp8 ”測(cè)試程序并觀察運(yùn)行結(jié)果顯示如圖5-18所示。dpw冥-xn-乂total 127-rw -r一一r-一12-r-w x一 xlxdrywr-xr-x dpWMr-r-K-nwwr-r-K dnwwr-r-M dpnwr-xr-x drwwr-xr-

48、x drwwr-Hr-x ctw xr-xx chw 冊(cè)一 xn-x t-w 、力跖165122222222/rdot# dotraoi root root root root root root root roct root root root root userl user2,/rQot #cat /nnt/fLoppy/dirl/dlist.毗/Tloppy/dlr2/f 11stroo t1024 May 27 05:10 /honteroo七114570 May 27 05:10 5-5 +b(nproot28 May 22 22137 abcr1 口毗5 Nay 22 22:00

49、flroo t5 Nay 22 22:01 TZroot1024 Apr 26 03:18 ftp1024 Apr 26 03:18 httpdroot50 May 22 21152 myenvnobody1024 Oct 12 1908 sambaroot1024 May 24 09:23 tenplOroot1024 May 24 09:23 tenp6root1024 May 24 00:23 tenp7root1024 May 24 09i29roo t1024 May 24 09123 tenpguserl1024 May 20 09:20 userluser21024 Nay 20 09:18 user2圖 5-189、編寫(xiě)shell程序文件shp9和sub1,存放在當(dāng)前目錄下,程序完成以下功能:shp9作為shell程序文件的主文件,sub1作為s

溫馨提示

  • 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)論