Shell腳本編程詳解-免費(fèi)共享_第1頁(yè)
Shell腳本編程詳解-免費(fèi)共享_第2頁(yè)
Shell腳本編程詳解-免費(fèi)共享_第3頁(yè)
Shell腳本編程詳解-免費(fèi)共享_第4頁(yè)
Shell腳本編程詳解-免費(fèi)共享_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第12章Shell腳本編程Shell命令行的運(yùn)行編寫(xiě)、修改權(quán)限和執(zhí)行Shell程序的步驟在Shell程序中使用參數(shù)和變量表達(dá)式比較、循環(huán)結(jié)構(gòu)語(yǔ)句和條件結(jié)構(gòu)語(yǔ)句在Shell程序中使用函數(shù)和調(diào)用其他Shell程序12-1Shell命令行書(shū)寫(xiě)規(guī)則學(xué)習(xí)目標(biāo)Shell命令行的書(shū)寫(xiě)規(guī)則對(duì)Shell命令行基本功能的理解有助于編寫(xiě)更好的Shell程序,在執(zhí)行Shell命令時(shí)多個(gè)命令可以在一個(gè)命令行上運(yùn)行,但此時(shí)要使用分號(hào)(;)分隔命令,例如:rootlocalhost root# ls a* -l;free;df長(zhǎng)Shell命令行可以使用反斜線字符()在命令行上擴(kuò)充,例如:rootlocalhost root

2、# echo “ this is >long comma nd ” This is long comma nd>”符號(hào)是自動(dòng)產(chǎn)生的,而不是輸入的12-2 編寫(xiě)/修改權(quán)限及執(zhí)行 Shell程序的步驟學(xué)習(xí)目標(biāo)編寫(xiě)Shell程序執(zhí)行Shell程序Shell程序有很多類(lèi)似C語(yǔ)言和其他程序設(shè)計(jì)語(yǔ)言的特征,但是又沒(méi)有程序語(yǔ)言那樣復(fù)雜。Shell程序是指放在一個(gè)文件中的一系列Linux命令和實(shí)用程序。在執(zhí)行的時(shí)候,通過(guò)Linux操作系統(tǒng)一個(gè)接一個(gè)地解釋和執(zhí)行每條命令。首先,來(lái)編寫(xiě)第一個(gè)Shell程序,從中學(xué)習(xí) Shell程序的編寫(xiě)、修改權(quán)限、執(zhí)行過(guò)程。12-2-1 編輯Shell程序編輯一個(gè)內(nèi)容

3、如下的源程序,保存文件名為date,可將其存放在目錄/bin下。rootlocalhostbin #vidate #! /bi n/shecho “Mr.$USER,Today is: echo & date“ +%B%d%” echo “ Wish you a lucky day !#! /bin/sh通知采用Bash解釋。如果在 echo語(yǔ)句中執(zhí)行 Shell命令date,則需要在date命令前加符號(hào)“ &”,其中B%d%為輸入格式控制符。12-2-2建立可執(zhí)行程序編輯完該文件之后不能立即執(zhí)行該文件,需給文件設(shè)置可執(zhí)行程序權(quán)限。使用如下命令。rootlocalhostbin

4、 #chmod+x date12-2-3 執(zhí)行Shell程序執(zhí)行Shell程序有下面三種方法:方法一:rootlocalhostbi n#./dateMr.root,Today is:二月06星期二Wish you a lucky day !方法二:另一種執(zhí)行date的方法就是把它作為一個(gè)參數(shù)傳遞給Shell命令:rootlocalhostbin #Bash dateMr.root,Today is:二月06星期二Wish you a lucky day !方法三:為了在任何目錄都可以編譯和執(zhí)行Shell所編寫(xiě)的程序,即把/bin的這個(gè)目錄添加到整個(gè)環(huán)境變量中。具體操作如下:rootlocal

5、hostroot#exportPATH=/bi n: $PATHrootlocalhostbin # dateMr.root,Today is:二月06星期二Wish you a lucky day !實(shí)例12-1編寫(xiě)一個(gè)Shell程序mkf,此程序的功能是:顯示root下的文件信息,然后建立一個(gè)kk的文件夾,在此文件夾下建立一個(gè)文件aa,修改此文件的權(quán)限為可執(zhí)行。分析:此Shell程序中需要依次執(zhí)行下列命令為:進(jìn)入 root 目錄:cd /root顯示root目錄下的文件信息:Is - l新建文件夾kk: mkdir kk進(jìn)入root/kk 目錄:cd kk新建一個(gè)文件aa: vi aa #

6、編輯完成后需手工保存修改aa文件的權(quán)限為可執(zhí)行:chmod +x aa回至U root 目錄:cd /root因此該Shell程序只是以上命令的順序集合,假定程序名為 mkfrootlocalhost root#vi mkfcd /rootls - lmkdir kkcd kkvi aachmod +x aacd /root12-3 在Shell程序中使用的參數(shù)學(xué)習(xí)目標(biāo)位置參數(shù) 內(nèi)部參數(shù)如同ls命令可以接受目錄等作為它的參數(shù)一樣,在Shell編程時(shí)同樣可以使用參數(shù)。Shell程序中的參數(shù)分為位置參數(shù)和內(nèi)部參數(shù)等。12-3-1 位置參數(shù)由系統(tǒng)提供的參數(shù)稱(chēng)為位置參數(shù)。位置參數(shù)的值可以用$N得到,N

7、是一個(gè)數(shù)字,如果為 1,即$1。類(lèi)似C語(yǔ)言中的數(shù)組,Linux會(huì)把輸入的命令字符串分段并給每段進(jìn)行標(biāo)號(hào),標(biāo)號(hào)從0開(kāi)始。第0號(hào)為程序名字,從 1開(kāi)始就表示傳遞給程序的參數(shù)。如$0表示程序的名字,$1表示傳遞給程序的第一個(gè)參數(shù),以此類(lèi)推。12-3-2 內(nèi)部參數(shù)上述過(guò)程中的$o是一個(gè)內(nèi)部變量,它是必須的,而$1則可有可無(wú),最常用的內(nèi)部變量有 $o、$#、$?、$*,它們的含義如下。$o:命令含命令所在的路徑。$#:傳遞給程序的總的參數(shù)數(shù)目。$?:Shell 程序在Shell中退岀的情況,正常退岀返回0,反之為非0值$*:傳遞給程序的所有參數(shù)組成的字符串。:編寫(xiě)一個(gè)Shell程序,用于描述Shell程

8、序中的位置參數(shù)為:$0、 $#、$?、$*,程序名為testl ,代碼如下:rootlocalhost bin #vi testl#! /bi n/shecho “ Program name is $0” ;echo“ There are totally $# parameterspassed to this programecho“The last is $?” ;echo“The parameter are $* ” ;執(zhí)行后的結(jié)果如下:rootlocalhostbin # test1 this is a test program /傳遞5個(gè)參數(shù)Program name is /bin/t

9、est1/給出程序的完整路徑和名字There are totally5 parameters passedto this program/參數(shù)的總數(shù)The last is 0/程序執(zhí)行效果The parametersare this is a test program/返回由參數(shù)組成的字符串注意:命令不計(jì)算在參數(shù)內(nèi)test2的簡(jiǎn)單刪除程序,如刪除的文件名為a,則在終端中輸入的命令為:test a分析:除命令外至少還有一個(gè)位置參數(shù),即$#不能為0,刪除不能為$1,程序設(shè)計(jì)過(guò)程如下(1) 用vi編輯程序rootlocalhost bin #vi test2#! /bi n/shif test $#

10、 -eq 0the necho “ Please specify a file!”elsegzip $1/現(xiàn)對(duì)文件進(jìn)行壓縮mv $1.gz $HOME/dustbi n/移動(dòng)到回收站echo “ File $1 is deleted ! ”fi(2) 設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod+x test2 運(yùn)行rootlocalhost bin# test2 a ( 如果 a 文件在 bin 目錄下存在)File a is deleted!12-4 在Shell程序中的使用變量學(xué)習(xí)目標(biāo)變量的賦值變量的訪問(wèn)變量的輸入12-4-1變量的賦值在Shell編程中,所有的變量名都由字符串

11、組成,并且不需要對(duì)變量進(jìn)行聲明 一個(gè)變量,其格式如下:變量名=值八注意:等號(hào)(=)前后沒(méi)有空格例如:x=6a= ” How are you ”表示把6賦值給變量x,字符串“ How are you ”賦值給變量a。12-4-2 訪問(wèn)變量值如果要訪問(wèn)變量值,可以在變量前面加一個(gè)美元符號(hào)“$”,例如:rootlocalhost bin#a=” Howare you ”rootlocalhostbin #echo“ He juest said:$a ”A is:hello world一個(gè)變量給另一個(gè)變量賦值可以寫(xiě)成:變量2=$變量1例如:x=$i要賦值給i+可以寫(xiě)成:i=$i+112-4-3鍵盤(pán)讀入

12、變量值在Shell程序設(shè)計(jì)中,變量的值可以作為字符串從鍵盤(pán)讀入,其格式為:read 變量例如:rootlocalhostbin # read strread為讀入命令,它表示從鍵盤(pán)讀入字符串到str:編寫(xiě)一個(gè)Shell顯示這個(gè)目錄下所有文件的信息 分析:程序test3,程序執(zhí)行時(shí)從鍵盤(pán)讀入一個(gè)目錄名,然后存放目錄的變量為 DIRECTORY其讀入語(yǔ)句為:read DIRECTORY顯示文件的信息命令為:ls - arootlocalhost bi n#vi test3#! /bi n/shecho “ please in put name of directory”read DIRECTORY

13、cd $DIRECTORYls - l設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod+x test3執(zhí)行rootlocalhostbin #./test3輸入路徑時(shí)需“ /test4,從鍵盤(pán)讀入x、y的值,然后做加法運(yùn)算,最后輸出結(jié)果。(1 )用vi編輯程序rootlocalhost bin #vi test4 #! /bi n/shecho “ please in put x y ”read x,yz='expr $x+$y'echo“ The sum is $z ”(2 )設(shè)置權(quán)限r(nóng)ootlocalhost bin #chmod +x test4 執(zhí)行rootloc

14、alhost bin #./ test445 78The sum is 123-f nf 注意:表達(dá)式total='expr $total +$num'及num='expr $num +1' 中的符號(hào)"' ”為鍵盤(pán)左上角的'鍵。12-5 表達(dá)式的比較學(xué)習(xí)目標(biāo)字符串操作符邏輯運(yùn)算符用test比較的運(yùn)算符數(shù)字比較符文件操作符在Shell程序中,通常使用表達(dá)式比較來(lái)完成邏輯任務(wù)。表達(dá)式所代表的操作符有字符操作符、數(shù)字操作符、邏輯操作符、以及文件操作符。其中文件操作符是一種Shell所獨(dú)特的操作符因?yàn)镾hell里的變量都是字符串,為了達(dá)到對(duì)文件

15、進(jìn)行操作的目的,于是才提供了文件操作符。12-5-1 字符串比較作用:測(cè)試字符串是否相等、長(zhǎng)度是否為零,字符串是否為NULL。常用的字符串操作符如表12-1所示.。表12-1常用的字符串操作符字符串操作符含義及返回值=P比較兩個(gè)字符串是否相同,相同則為“真”!=比較兩個(gè)字符串是否不相同,不同則為“真”-n比較兩個(gè)字付串長(zhǎng)度疋否大于零,右大于零則為 真-z比較兩個(gè)字符串長(zhǎng)度是否等于零,若等于零則為“真”(1 )用Vi編輯程序rootlocalhost bin#vi test5#! /bin/Bashread ar1read ar2“ $ar1 ” =“ $ar2 ” echo $? #?保存前一

16、個(gè)命令的返回碼(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod +x test5執(zhí)行rootlocalhostroot#./ test5aaabbb1注意:”后面和”前面及等號(hào)“=“的前后都應(yīng)有一個(gè)空格;注意這里是程序的退岀情況, 如果ar1和ar2的字符串是不想等的非正常退岀,輸岀結(jié)果為1。實(shí)例12-7 :比較字符串長(zhǎng)度是否大于零(1 )用vi編輯程序rootlocalhost bin #vi test6#! /bi n/Bashread ar-n “ $ar ” echo $? / 保存前一個(gè)命令的返回碼 (2 )設(shè)置權(quán)限r(nóng)ootlocalhost bin #chmod +x

17、 test6(3) 執(zhí)行rootlocalhostbin #./test6運(yùn)行結(jié)果1表示ar的小于等于零,0表示ar的長(zhǎng)度大于零。12-5-2數(shù)字比較在Bash Shell編程中的關(guān)系運(yùn)算有別于其他編程語(yǔ)言,用表12-2中的運(yùn)算符用test語(yǔ)句表示大小的比較。表12-2 用test比較的運(yùn)算符運(yùn)算符號(hào)含義-eq相等-ge大于等于-le小于等于-ne不等于-gt大于-lt小于rootlocalhostbin #vitest7#! /bi n/Bashread x,yif test $x-eq $ythe necho“ $x=$y ”elseecho“$x!=$y ”fi比較兩個(gè)數(shù)字是否相等(1

18、)用vi編輯程序(2 )設(shè)置權(quán)限r(nóng)ootlocalhost bin #chmod +x test7(3)執(zhí)行rootlocalhostbin #./test750 10050!=100rootlocalhost150 150150= =150bin #./test7實(shí)例12-812-5-3邏輯操作在Shell程序設(shè)計(jì)中的邏輯運(yùn)算符如表12-3所示12-3 Shell 中的邏輯運(yùn)算符運(yùn)算符號(hào)含義!反:與一個(gè)邏輯值相反的邏輯值-aP與(an d):兩個(gè)邏輯值為“是”返回值為“是”,反之為“否”-o或(or):兩個(gè)邏輯值有一個(gè)為“是”,返回值就是“是”實(shí)例12-9 :分別給兩個(gè)字符變量賦值,一個(gè)變量

19、賦予一定的值,另一個(gè)變量為空,求兩者的與、或操作(1 )用vi編輯程序rootlocalhost#! /bi n/Bashpart1 =” 1111part2 =“ $ part1echo $?#“ $ part1echo $?(2 )設(shè)置權(quán)限bin#vitest8#part2-a “ $ part2 ”保存前一個(gè)命令的返回碼-o “ $ part2 ”為空rootlocalhost bin #chmod +x test8(3)執(zhí)行rootlocalhostbin #./test81012-5-4文件操作文件測(cè)試操作表達(dá)式通常是為了測(cè)試文件的信息,一般由腳本來(lái)決定文件是否應(yīng)該備份、 復(fù)制或刪除

20、。由于test關(guān)于文件的操作符有很多,在表12-4中只列舉一些常用的操作符。表12-4文件測(cè)試操作符運(yùn)算符號(hào)含義-d:對(duì)象存在且為目錄返回值為“是”-f對(duì)象存在且為文件返回值為“是”-L對(duì)象存在且為符號(hào)連接返回值為“是”-r對(duì)象存在且可讀則返回值為“是”-sr對(duì)象存在且長(zhǎng)度非零則返回值為“是”-w對(duì)象存在且且可寫(xiě)則返回值為“是”-x對(duì)象存在且且可執(zhí)行則返回值為“是”實(shí)例12-10 :判斷zb目錄是否存在于/root下。(1)用vi編輯程序rootlocalhostbi n#vitest9#! /bi n/Bash-d /root/zbecho $? #保存前一個(gè)命令的返回碼(2 )設(shè)置權(quán)限r(nóng)o

21、otlocalhostbin #chmod+x test9(3)執(zhí)行rootlocalhostbin t#./test9(4)在/root 添加zb目錄rootlocalhostbin #mkdirzb(5)執(zhí)行rootlocalhostbi n#./test90'A""注意:運(yùn)行結(jié)果是返回參數(shù)“ $?”,結(jié)果1表示判斷的目錄不存在, 0表示判斷的目錄不存在。:編寫(xiě)一個(gè)Shell程序testIO,輸入一個(gè)字符串,如果是目錄,則顯示目錄下的信息,如為文件顯示文件的內(nèi)容(1 )用vi編輯程序rootlocalhostbin #vitestIO#! /bi n/Bashe

22、cho“ Please en ter the directoryread DORFif -d $DORF the nn ame or file n amels $DORFelif -f $DORF the ncat $DORFelseecho “ in put error! ”fi(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod +x test10(3)執(zhí)行rootlocalhostbin #./ test1012-6循環(huán)結(jié)構(gòu)語(yǔ)句學(xué)習(xí)目標(biāo)Shell的循環(huán)語(yǔ)句Shell常見(jiàn)的循環(huán)語(yǔ)句有 for循環(huán)、while循環(huán)語(yǔ)句和until循環(huán)12-6-1 for 循環(huán)語(yǔ)法:for 變量in

23、列表do操作done、:I . 7.注意:變量要在循環(huán)內(nèi)部用來(lái)指列表當(dāng)中的對(duì)象。列表是在for循環(huán)的內(nèi)部要操作的對(duì)象,可以是字符串也可以是文件,如果是文件則為文件實(shí)例12-12:在列表中的值:a,b,c,e,l,2,4,6,8用循環(huán)的方式把字符與數(shù)字分成兩行輸出(1 )用gedit編輯腳本程序testll rootlocalhostbin #gedittestll#! /bi n/Bashfor i in a,b,c,e,I2,4,6,8doecho $idone(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod+x test11(3)執(zhí)行rootlocalhost bin #./

24、 test11a,b,c,e,i2,4,6,8在循環(huán)列表中的空格可表示換行。實(shí)例12-13 :刪除垃圾箱中的所有文件。分析:在本機(jī)中,垃圾箱的位置是在 $HOME/.Trash中,因而是在刪除$HOME/.Trash列表當(dāng) 中的所有文件,程序腳本如下。(1 )用gedit編輯腳本程序test12rootlocalhostbin #gedittest12#! /bi n/Bashfor i in $HOME/.Trash/*dorm $ iecho “ $ i has bee n deleted! ”done(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbi n#chmod +x test12(3)

25、執(zhí)行rootlocalhostbi n#./test12/root/.Trash/abchas bee n deleted!/root/.Trash/abc1has bee n deleted!:求從1100的和。(1 )用gedit編輯腳本程序test13rootlocalhostbin #gedittest13#! /bi n/Bashtotal =0for(j=1;j<=100;j+);dototal='expr$total + $j'doneecho “ The result is $total(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod+x t

26、est13(3)執(zhí)行rootlocalhostbin #./test13The result is 5050汪意:total='expr $total +$j' 的加for語(yǔ)句中的雙括號(hào)不能省,最后的分號(hào)可有可無(wú),表達(dá)式 號(hào)兩邊的空格不能省,否則會(huì)成為字符串的連接。12-6-2 while 循環(huán)語(yǔ)法:while 表達(dá)式do操作done只要表達(dá)式為真,do和done之間的操作就一直會(huì)進(jìn)行。:用while 循環(huán)求1100的和。(1 )用gedit編輯腳本程序test14rootlocalhostbin #gedittest13total =0n um=0while( num<

27、=100);dototal= ' expor $total +$ num' doneecho “ The result is $total”(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod +x test14(3) 執(zhí)行rootlocalhostbin #./ test14The result is 505012-6-3 until 循環(huán)語(yǔ)法:un til表達(dá)式do操作done重復(fù)do和done之間的操作直到表達(dá)式成立為止實(shí)例 12-16 :用 until循環(huán)求1100的和(1 )用gedit編輯腳本程序test15rootlocalhostbin #gedit

28、test15total =0 n um=0un til $sumdototal= n um= done-gt 100'expor $total +$ numexpr $num + 1 'echo “ The result is $total(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod +x test15(3) 執(zhí)行rootlocalhostbin #./ test15The result is 505012-7條件結(jié)構(gòu)語(yǔ)句學(xué)習(xí)目標(biāo)Shell的條件結(jié)構(gòu)語(yǔ)句Shell程序中的條件語(yǔ)句主要有if語(yǔ)句與case語(yǔ)句12-7-1 if 語(yǔ)句語(yǔ)法:if 表達(dá)式1 then

29、操作elif 表達(dá)式2 then操作elif 表達(dá)式3 then操作J Jelse操作fi的縮寫(xiě)。其中,Linux里的if的結(jié)束標(biāo)志是將if反過(guò)來(lái)寫(xiě)成fi ;而elif 其實(shí)是else if elif理論上可以有無(wú)限多個(gè)。:用for循環(huán)求1 100的和。(1 )用gedit編輯腳本程序test16rootlocalhostbin #gedittest16for(j=0;jv=10;j+)doif($j%2=1)the necho“ $j ”fidone(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbi n#chmod +x test16(3)執(zhí)行rootlocalhostbi n#./test16

30、1357912-7-2 case 語(yǔ)句語(yǔ)法:case表達(dá)式in值1|值2)操作;;值引值4)操作;;值5|值6)操作;;* )操作;;esaccase的作用就是當(dāng)字符串與某個(gè)值相同是就執(zhí)行那個(gè)值后面的操作。如果同一個(gè)操作對(duì)于多個(gè)值,則使用“ | ”將各個(gè)值分開(kāi)。在 case的每一個(gè)操作的最后面都有兩個(gè)“;”分號(hào)是必需的。不同的反饋結(jié)果實(shí)例 12-18 : Linux是一個(gè)多用戶(hù)操作系統(tǒng),編寫(xiě)一程序根據(jù)不同的用戶(hù)登錄輸岀(1 )用vi編輯腳本程序test17 rootlocalhostbin #gedittest17#!/bi n/shcase $USER inbeechen)echo “You

31、 are beichen!” ;lia ngnian)echoi “ You are lia ngnian”;/注意這里只有一個(gè)分號(hào)echo"Welcome ! ” ;/這里才是兩個(gè)分號(hào)root )echo"You are root! ” ;echo“Welcome ! ” ;/將兩命令寫(xiě)在一行,用一個(gè)分號(hào)作為分隔符*)echo “Who are you?$USER? ” ;easc(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod +x test17(3) 執(zhí)行rootlocalhostbin #./ test17You are rootWelcome!12-

32、8 在Shell腳本中使用函數(shù)學(xué)習(xí)目標(biāo)Shell的函數(shù)Shell程序也支持函數(shù)。函數(shù)能完成一特定的功能,可以重復(fù)調(diào)用這個(gè)函數(shù)。 函數(shù)格式如下:函數(shù)名()函數(shù)體函數(shù)調(diào)用方式為函數(shù)名參數(shù)列表:編寫(xiě)一函數(shù)add求兩個(gè)數(shù)的和,這兩個(gè)數(shù)用位置參數(shù)傳入,最后輸岀結(jié)果。(1 )編輯代碼rootlocalhost bin #gedit test18#!/bi n/shadd()a=$1b=$2z=' expr $a + $b 'echo“ The sum is $z ”add $1 $2(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod +x test18執(zhí)行rootlocalho

33、stbin #./ test18 10 20The sum is 30函數(shù)定義完成后必須同時(shí)寫(xiě)岀函數(shù)的調(diào)用,然后對(duì)此文件進(jìn)行權(quán)限設(shè)定,在執(zhí)行此文件。12-9 在Shell腳本中調(diào)用其他腳本學(xué)習(xí)目標(biāo)Shell腳本的調(diào)用在Shell腳本的執(zhí)行過(guò)程中,Shell腳本支持調(diào)用另一個(gè) Shell腳本,調(diào)用的格式為: 程序名實(shí)例12-20 :在Shell腳本test19 中調(diào)用test20(1)調(diào)用 test20#test19 腳本#!/bi n/shecho “ The main n ame is $0 ./test20echo “The first string is $1#test20 腳本#!/b

34、i n/shecho “ How are you $USER?(2 )設(shè)置權(quán)限r(nóng)ootlocalhostbin #chmod+x test19rootlocalhostbin #chmod+x test20(3)執(zhí)行rootlocalhost bin #./ test19 abc123The mai n n ame is ./test19How are you root?the first stri ngis abc1231)在Linux編輯中命令區(qū)分大小寫(xiě)字符。2) 在Shell語(yǔ)句中加入必要的注釋?zhuān)员阋院蟛樵?xún)和維護(hù),注釋以#開(kāi)頭。3 )對(duì)Shell變量進(jìn)行數(shù)字運(yùn)算時(shí),使用乘法符號(hào)“* ”

35、時(shí),要用轉(zhuǎn)義字符“”進(jìn)行轉(zhuǎn)義4)由于Shell對(duì)命令中多余的空格不進(jìn)行任何處理,因此程序員可以利用這一特性調(diào)整程序縮 進(jìn),達(dá)到增強(qiáng)程序可讀性效果。5)在對(duì)函數(shù)命名時(shí)最好能使用有含義且能容易理解的名字,即使函數(shù)名能夠比較準(zhǔn)確地表達(dá)函 數(shù)所完成的任務(wù)。同時(shí)建議對(duì)于較大的程序要建立函數(shù)名和變量命名對(duì)照表。12-10 本章小結(jié)本章講解了 Linux下Shell腳本的定義和相關(guān)Shell腳本編寫(xiě)的基礎(chǔ),這些基礎(chǔ)知識(shí)是學(xué)習(xí)Shell腳本編程的關(guān)鍵。接著講解了Shell腳本的執(zhí)行方式和Shell腳本的常見(jiàn)流程控制,為Shell腳本的編程做了準(zhǔn)備課后習(xí)題1. 選擇題(1) 下列說(shuō)法中正確的是()。A . 安裝

36、軟件包 fctix-3.4.tar.bz2,要按順序使用./configure;make;makein stall;tar 命令B. 掛載 U盤(pán),mount /dev/sda /mnt/u -o iocharset=gb2312C. 顯示變量PS1的值用命令 echo PS1D. 用命令./abc與sh abc執(zhí)行Shell腳本abc,所得的結(jié)果并不相同(2) 一個(gè)Bash Shell腳本的第一行是什么()。A. #!/bi n/BashB. #/bi n/BashC. #/b in/cshD. /bi n/Bash(3) 在Shell腳本中,用來(lái)讀取文件內(nèi)各個(gè)域的內(nèi)容并將其賦值給Shell變

37、量的命令是()A. fold B. join C. trD. read(4) 下列變量名中有效的Shell變量名是()。A. -2-timeB. _2$3C. trust_ no_1D. 2004file(5) 下列對(duì)Shell變量FRUIT操作,正確的是()。A.為變量賦值:$FRUIT=apple B.顯示變量的值:fruit=appleC.顯示變量的值:echo $FRUIT D.判斷變量是否有值:-f“$FRUIf (6) 在Fedora 12系統(tǒng)中,下列關(guān)于 Shell腳本程序說(shuō)法不正確的是()。A. Shell腳本程序以文本的形式存儲(chǔ)B. Shell腳本程序在運(yùn)行前需要進(jìn)行編譯C.

38、 Shell腳本程序由解釋程序解釋執(zhí)行D. Shell腳本程序主要用于系統(tǒng)管理和文件操作,它能夠方便自如地處理大量重復(fù)性的系統(tǒng)工作(7) 在Shell編程中關(guān)于$2的描述正確的是()。A. 程序后攜帶了兩個(gè)位置參數(shù)B. 宏替換C. 程序后面攜帶的第二個(gè)位置參數(shù)D攜帶位置參數(shù)的個(gè)數(shù)E用$2引用第二個(gè)位置參數(shù)(8) 在 Fedora 12 系統(tǒng)中,“ run.sh ”是 Shell 執(zhí)行腳本,在執(zhí)行./run.sh file1 file2file3 的命令的過(guò)程中,變量 $1的值為()。A. run .shB. file1 C. file2 D. file32. 填空題(1) 在Shell編程時(shí),

39、使用方括號(hào)表示測(cè)試條件的規(guī)則是 。(2) 編寫(xiě)的Shell程序運(yùn)行前必須賦予該腳本文件 權(quán)限。3. 簡(jiǎn)答題(1) 用Shell編程,判斷一文件是不是字符設(shè)備文件,如果是將其拷貝到/dev目錄下。(2) 在根目錄下有四個(gè)文件m1.txt , m2.txt , m3.txt ,m4.txt,用Shell編程,實(shí)現(xiàn)自動(dòng)創(chuàng)建 m1,m2,m3,m4四個(gè)目錄,并將 m1.txt,m2.txt,m3.txt,m4.txt四個(gè)文件分別拷貝 到各自相應(yīng)的目錄下。(3) 某系統(tǒng)管理員需每天做一定的重復(fù)工作,請(qǐng)按照下列要求,編制一個(gè)解決方案:在下午4 :50 刪除/abc目錄下的全部子目錄和全部文件;從早8:00

40、下午6:00每小時(shí)讀取/xyz目錄下x1文件中每行第一個(gè)域的全部數(shù)據(jù)加入到/backup 目錄下的bak01.txt文件內(nèi);每逢星期一下午5:50將/data 目錄下的所有目錄和文件歸檔并壓縮為文件:backup.tar.gz ;在下午5:55將IDE接口的CD-ROM卸載(假設(shè):CD-ROM的設(shè)備名為hdc ); 在早晨8:00前開(kāi)機(jī)后啟動(dòng)。(4) 請(qǐng)用Shell編程來(lái)實(shí)現(xiàn):當(dāng)輸入不同的選擇時(shí),執(zhí)行不同的操作,如:輸入start 開(kāi)始啟動(dòng)應(yīng)用程序 myfiles ,輸入stop時(shí),關(guān)閉myfiles ,輸入status 時(shí),查看myfiles 進(jìn)程,否則執(zhí)行* )顯示“ EXIT! ”并退岀

41、程序。(5) 編寫(xiě)一個(gè)Shell程序,此程序的功能是:顯示root下的文件信息,然后建立一個(gè)abc的文件夾,在此文件夾下建立一個(gè)文件k.c,修改此文件的權(quán)限為可執(zhí)行。(6) 編寫(xiě)一個(gè)Shell程序,掛載U盤(pán),在U盤(pán)中根目錄下所有.c文件拷貝到當(dāng)前目錄,然后卸載U盤(pán)。(7) 編寫(xiě)一個(gè)Shell程序,程序執(zhí)行時(shí)從鍵盤(pán)讀入一個(gè)文件名,然后創(chuàng)建這個(gè)文件。(8) 編寫(xiě)一個(gè)Shell程序,鍵盤(pán)輸入兩個(gè)字符串,比較兩個(gè)字符串是否相等。(9) 編寫(xiě)三個(gè)Shell程序,分別用for、while、與until求從2+4+, +100的和。(10) 編寫(xiě)一個(gè)Shell程序,鍵盤(pán)輸入兩個(gè)數(shù)及 +、-、*、與/中的任一

42、運(yùn)算符,計(jì)算這兩個(gè)數(shù)的運(yùn)算 結(jié)果。(11) 編寫(xiě)兩個(gè)Shell程序kk及aa,在kk中輸入兩個(gè)數(shù),調(diào)用 aa計(jì)算計(jì)算這兩個(gè)數(shù)之間奇數(shù)的和。(12) 編寫(xiě)Shell程序,可以?huà)燧d U盤(pán),也可掛載 Windows硬盤(pán)的分區(qū),并可對(duì)文件進(jìn)行操作。(13) 編寫(xiě)4個(gè)函數(shù)分別進(jìn)行算術(shù)運(yùn)算 +、-、*、/,并編寫(xiě)一個(gè)菜單,實(shí)現(xiàn)運(yùn)算命令。課程實(shí)訓(xùn)實(shí)訓(xùn)內(nèi)容:編寫(xiě)一個(gè)Shell程序,呈現(xiàn)一個(gè)菜單,有0-5共6個(gè)命令選項(xiàng),1為掛載U盤(pán),2為卸載U盤(pán),3為顯示U盤(pán)的信息,4把硬盤(pán)中的文件拷貝到 U盤(pán),5把U盤(pán)中的文件拷貝到硬盤(pán) 中,選0為退出。程序分析:把此程序分成題目中要求的6大功能模塊,另外加一個(gè)菜單顯示及選擇的主模板。(1)編輯代碼rootlocalhost bi n#vi test19#!/bi n/sh#mou n

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論