第3章Sell編程_第1頁
第3章Sell編程_第2頁
第3章Sell編程_第3頁
第3章Sell編程_第4頁
第3章Sell編程_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1編寫、權(quán)限修改和執(zhí)行編寫、權(quán)限修改和執(zhí)行shell程序的步驟程序的步驟 qshell編程有很多類似c語言和其他程序設(shè)計語言的特征,但是又沒有編程語言那樣復(fù)雜。shell程序是指放在一個文件中的一系列l(wèi)inux命令和實用程序,在執(zhí)行的時候,通過linux操作系統(tǒng)一個接著一個地解釋和執(zhí)行每條命令。 2編寫、權(quán)限修改和執(zhí)行編寫、權(quán)限修改和執(zhí)行shell程序的步驟程序的步驟1. 編輯編輯shell程序程序q 編輯一個內(nèi)容如下的源文件,文件名為date,可將其存放在目錄/bin下。rootlocalhost bin#vi date#!/bin/sh echo mr.$user,today is:ech

2、o &date +%b%d%aecho whish you a lucky day !q 注意:#!/bin/sh通知采用bash解釋,在echo語句中執(zhí)行shell命令date,在date命令前加符號“&”,%b%d%a為輸出格式控制符。 3編寫、權(quán)限修改和執(zhí)行編寫、權(quán)限修改和執(zhí)行shell程序的步驟程序的步驟2. 建立可執(zhí)行的二進制程序建立可執(zhí)行的二進制程序q編輯完該文件之后不能立即執(zhí)行該文件,需給文件設(shè)置可執(zhí)行權(quán)限。使用如下命令:chmod +x date4編寫、權(quán)限修改和執(zhí)行編寫、權(quán)限修改和執(zhí)行shell程序的步驟程序的步驟3. 執(zhí)行shell程序 q 方法(1)roo

3、tlocalhost bin# ./date mr.root,today is:二月06星期二wish you a lucky day !q 方法(2)另外一種執(zhí)行date的方法就是把它作為一個參數(shù)傳給shell命令:rootlocalhost bin# bash datemr.root,today is:二月06星期二wish you a lucky day !5編寫、權(quán)限修改和執(zhí)行編寫、權(quán)限修改和執(zhí)行shell程序的步驟程序的步驟q 例3.1 編寫一個shell程序,此程序的功能是:顯示root下的文件信息,然后建立一個kk的文件夾,在此文件夾下新建一個文件aa,修改此文件的權(quán)限為可執(zhí)行。

4、分析:此shell程序中需要依次執(zhí)行命令:1. 進入root目錄:cd /root2. 顯示root目錄下的文件信息:ls l3. 新建文件夾kk:mkdir kk4. 進入root/kk目錄:cd kk5. 新建一個文件aa:vi aa #編輯完成后需手工保存6. 修改aa文件的權(quán)限為可執(zhí)行:chmod +x aa7. 回到root目錄:cd /root6編寫、權(quán)限修改和執(zhí)行編寫、權(quán)限修改和執(zhí)行shell程序的步驟程序的步驟shell程序只是以上命令的順序集合,假定程序名為mkf。rootlocalhost root#vi mkfcd /rootls lmkdir kkcd kkvi aa

5、chmod +x aacd /root7在shell程序中使用的參數(shù) 1.位置參數(shù)位置參數(shù)q由系統(tǒng)提供的參數(shù)稱為位置參數(shù)。位置參數(shù)的值可以用$n得到,n是一個數(shù)字,如果為1,即$1.類似c語言中的數(shù)組,linux會把輸入的命令字符串分段并給每段進行標(biāo)號,標(biāo)號從0開始。第0號為程序名字,從1開始就表示傳遞給程序的參數(shù)。如$0表示程序的名字,$1表示傳遞給程序的第一個參數(shù),以此類推。8在shell程序中使用的參數(shù)2.內(nèi)部參數(shù)內(nèi)部參數(shù)q上述過程中的$0是一個內(nèi)部變量,它是必須的,而$1則可有可無,最常用的內(nèi)部變量有$0、$#、$?、$*,它們的含義如下:q$0 :命令含命令所在的路徑q$# :傳遞給

6、程序的總的參數(shù)數(shù)目q$? :shell程序在shell中退出的情況,正常退出返回0,反之為非0值q$* :傳遞給程序的所有參數(shù)組成的字符串9在shell程序中使用的參數(shù)q 例3.2 編寫一個shell程序,用于描述shell程序中的位置參數(shù)$0、$#、$?、$*,程序名為test1,代碼如下:rootlocalhost bin#vi test1#!/bin/sh echo program name is $0;echo there are totally $# parameters passed to this program;echo the last is $?;echo the para

7、meters are $*;注意:命令不計算在參數(shù)內(nèi)。10在shell程序中使用變量 1.變量的賦值q在shell編程中,所有的變量名都由字符串組成,并且您不需要對變量進行聲明。q格式:變量名=值q注意:必須保證等號(=)前后沒有空格。q例:x=6a=hello world11在shell程序中使用變量2.訪問變量值 q如果要訪問變量值,可以在變量前面加一個美元符號”$”,如: a=hello worldecho a is: $aq一個變量給另一個變量賦值可以寫成:變量變量2=$變量變量1q例如:x=$ii+可以寫成:i=$i+112在shell程序中使用變量3.鍵盤讀入 q在shell程序設(shè)

8、計中,變量的值可以作為字符串從鍵盤讀入,其格式為:read 變量變量q例如:例如:read strread為讀入命令,它表示從鍵盤讀入字符串到str13在shell程序中使用變量q 例3.4 編寫一個shell程序,程序執(zhí)行時從鍵盤讀入一個目錄名,然后顯示這個目錄下所有文件的信息。分析:設(shè)存放目錄的變量為directory,其讀入語句為:read directory顯示文件的信息命令為:ls alrootlocalhost bin#vi test3#!/bin/shecho please input name of directory read directorycd $directoryls

9、 l(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test3(3)執(zhí)行:rootlocalhost bin# ./test214在shell程序中使用變量q 例3.5 運行程序test3,從鍵盤讀入x、y的值,然后做加法運算,最后輸出結(jié)果。(1)用vi編輯程序rootlocalhost bin#vi test3#!/bin/shread x yz=expr $x + $yecho the sum is $z(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test3(3)執(zhí)行:rootlocalhost bin# ./test345 78the su

10、m is 12315表達(dá)式的比較1.字符串比較 q作用:測試字符串是否相等、長度是否為零,字符串是否為null。q常用的字符串操作符:16表達(dá)式的比較q 例3.6 從鍵盤讀入兩個字符串,判斷這兩個字符串是否相等,如相等輸出。(1)用vi編輯程序rootlocalhost bin#vi test4#!/bin/bashread ar1 read ar2 $ar1 = $ar2 echo $? #保存前一個命令的返回碼(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test4(3)執(zhí)行:rootlocalhost root# ./test4 aaabbb1注意注意: “”后面

11、和后面和“”前面及等前面及等號號“=”的前后都應(yīng)有一空格;的前后都應(yīng)有一空格;17表達(dá)式的比較q 例3.7 比較字符串長度是否大于零。(1)用vi編輯程序rootlocalhost bin#vi test5#!/bin/bashread ar -n $ar echo $? #保存前一個命令的返回碼(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test5(3)執(zhí)行:rootlocalhost root# ./test50注意注意: 運行結(jié)果運行結(jié)果1表示表示ar的小的小于等于零,于等于零,0表示表示ar的長度的長度大于零。大于零。18表達(dá)式的比較2.數(shù)字比較 q在bash

12、 shell編程中的關(guān)系運算有別于其他編程語言。19表達(dá)式的比較q 例38 比較兩個數(shù)字是否相等。(1)用vi編輯程序rootlocalhost bin#vi test6#!/bin/bashread x yif test $x -eq $y then echo “$x= =$y” else echo “$x!=$y”fi(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test6(3)執(zhí)行:rootlocalhost bin# ./test650 10050!=100rootlocalhost bin# ./test6150 150150= =15020表達(dá)式的比較3.邏

13、輯操作 q邏輯運算符號:21表達(dá)式的比較q 例3.9 一個變量賦予一定的值,另一個為空,求兩者的與、或。(1)用vi編輯程序rootlocalhost bin#vi test7#!/bin/bashpart1 =1111part2 = #part2為空 $part1 -a $part2 echo $? #保存前一個命令的返回碼 $part1 -o $part2 echo $? (2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test7(3)執(zhí)行:rootlocalhost bin# ./test71022表達(dá)式的比較4.文件操作文件操作q文件測試表達(dá)式通常是為了測試文件的

14、信息,一般由腳本來決定文件是否應(yīng)該備份、復(fù)制或刪除。q常用操作符:23表達(dá)式的比較q 例3.10 判斷zb目錄是否存在/root下。(1)用vi編輯程序rootlocalhost bin#vi test8#!/bin/bash -d /root/zb echo $? #保存前一個命令的返回碼(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test8(3)執(zhí)行:rootlocalhost bint# ./test81(4) 在/root添加zb目錄rootlocalhost bin#mkdir zb(5)執(zhí)行:rootlocalhost bin# ./test80注意注意:

15、 運行結(jié)果運行結(jié)果1表示判斷的表示判斷的目錄不存在,目錄不存在,0表示判斷的目表示判斷的目錄存在。錄存在。24表達(dá)式的比較q 例3.11 輸入一個字符串,如果是目錄,則顯示目錄下的信息,如為文件顯示文件的內(nèi)容。rootlocalhost bin#vi test9#!/bin/bashecho “please enter the directory name or file name”read dorfif -d $dorf then ls $dorf elif -f $dorfthencat $dorfelse echo “input error!”fi25循環(huán)結(jié)構(gòu)語句 1.for 循環(huán) q語

16、法:for 變量 in 列表 do 操作 doneq變量是要在循環(huán)內(nèi)部用來指代列表中的對象。變量是要在循環(huán)內(nèi)部用來指代列表中的對象。q列表是在for循環(huán)的內(nèi)部要操作的對象,可以是字符串也可以是文件,如果是文件則為文件名。26循環(huán)結(jié)構(gòu)語句 q 例3.12 在列表中的值:a,b,c,e,i,2,4,6,8用循環(huán)的方式把字符與數(shù)字分成兩行輸出。(1)用gedit編輯腳本程序test4rootlocalhost root# gedit test9#!/bin/shfor i in a,b,c,e,i 2,4,6,8 do echo $i done(2)設(shè)置權(quán)限:rootlocalhost bin#ch

17、mod +x test9(3)執(zhí)行:rootlocalhost bin# ./test9a,b,c,e,i2,4,6,8注意:在循環(huán)列表中注意:在循環(huán)列表中的空格可表示換行。的空格可表示換行。 27循環(huán)結(jié)構(gòu)語句 q 例:刪除垃圾箱中的所有文件分析:在本機中拉圾箱的位置在$home/.trash中,因而是刪除$home/.trash列表中的所有文件,程序腳本如下:(1)用gedit編輯腳本程序test10rootlocalhost bin# gedit test10#!/bin/shfor i in $home/.trash/* do rm $i echo $i has been deleted

18、! done(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test10(3)執(zhí)行:rootlocalhost bin# ./test10/root/.trash/abc has been deleted!/root/.trash/abc1 has been deleted!28循環(huán)結(jié)構(gòu)語句 q 例:求從1到100的和。(1)用gedit編輯腳本程序test11rootlocalhost bin# gedit test11#!/bin/shtotal=0for (j=1;j=100;j+); do total=expr $total + $j doneecho the r

19、esult is $total(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test11(3)執(zhí)行:rootlocalhost bin# ./test11the result is 5050注意:注意:for語句中的雙括號不能語句中的雙括號不能省,最后的分號可有可無,表達(dá)省,最后的分號可有可無,表達(dá)式式total=expr $total + $j的加的加號兩邊的空格不能省,否則會成號兩邊的空格不能省,否則會成為字符串的連接。為字符串的連接。29循環(huán)結(jié)構(gòu)語句 2.while循環(huán)循環(huán) q語法:while 表達(dá)式 do 操作 doneq只要while表達(dá)式為真,do和done

20、之間的操作就一直會進行。30循環(huán)結(jié)構(gòu)語句 q 例:用while循環(huán)求1到100的和。 (1)用gedit編輯腳本程序test12rootlocalhost bin#gedit test12 total=0 num=0 while(num=100);do total=expr $total + $num (num+=1) done echo the result is $total(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test12(3)執(zhí)行:rootlocalhost bin# ./test12the result is 505031循環(huán)結(jié)構(gòu)語句 3.until循

21、環(huán)循環(huán)q語法:until 表達(dá)式do操作doneq重復(fù)do和done之間的操作直到表達(dá)式成立為止。32循環(huán)結(jié)構(gòu)語句q 例:用until循環(huán)求1到100的和。(1)用gedit編輯腳本程序test13rootlocalhost bin#gedit test13total=0num=0until $num -gt 100 do total=expr $total + $num num=expr $num + 1doneecho the result is $total(2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test13(3)執(zhí)行:rootlocalhost bin#.

22、/test13the result is 505033條件結(jié)構(gòu)語句 1.if語句語句q 語法:if 表達(dá)式1 then操作elif 表達(dá)式2 then操作elif 表達(dá)式3 then操作else操作fiq linux里的if的結(jié)束標(biāo)志是將if反過來寫成fi;而elif其實是else if的縮寫q 其中elif理論上可以有無限多個。 34條件結(jié)構(gòu)語句 q 例:用for循環(huán)輸出1到10間的奇數(shù)。(1)用gedit編輯腳本程序test14rootlocalhost bin#gedit test14for(j=0;j=10;j+) do if($j%2=1) then echo $j fi done(

23、2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x test14(3)執(zhí)行:rootlocalhost bin#./test141357935條件結(jié)構(gòu)語句 2 case語句語句q 語法:case 字符串 in值1|值2)操作;值3|值4)操作;值5|值6)操作;*)操作;esacq case的作用就是當(dāng)字符串與某個值相同是就執(zhí)行那個值后面的操作。如果同一個操作對于多個值,則使用|將各個值分開。在case的每一個操作的最后面都有兩個;,分號是必須的。36條件結(jié)構(gòu)語句 q 例:linux是一個多用戶操作系統(tǒng),編寫一程序根據(jù)不同的用戶登錄輸出不同的反饋結(jié)果。(1)用vi編輯腳本程序t

24、est15rootlocalhost bin#vi test15#!/bin/shcase $user in beichen) echo you are beichen!; liangnian) echo you are liangnian; /注意這里只有一個分號 echo welcome!; /這里才是兩個分號 root) echo you are root! ; echo welcome!; /將兩命令寫在一行,用一個分號作為分隔符 *) echo who are you?$user?;esac37條件結(jié)構(gòu)語句 (2)設(shè)置權(quán)限:rootlocalhost bin#chmod +x tes

25、t15(3)執(zhí)行:rootlocalhost bin#./test15you are rootwelcome!38在shell腳本中使用函數(shù) qshell程序也支持函數(shù)。函數(shù)能完成一個特定的功能,可以重復(fù)調(diào)用這個函數(shù)。q函數(shù)格式如下:函數(shù)名( ) 函數(shù)體q函數(shù)調(diào)用方式為:函數(shù)名函數(shù)名 參數(shù)列表參數(shù)列表39在shell腳本中使用函數(shù) q 例:編寫一函數(shù)add求兩個數(shù)的和,這兩個數(shù)用位置參數(shù)傳入,最后輸出結(jié)果。(1)編輯代碼rootlocalhost bin#vi test16#!/bin/shadd( ) a=$1 b=$2 z=expr $a + $b echo the sum is $zadd $1 $2 (2)修改權(quán)限r(nóng)ootlocalhost bin#chmod +x

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論