




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第五章第五章 shellshell程序設計程序設計1、 硬件硬件 2 、內核、內核(kernel) 3、 Shell 進程管理 存儲管理 設備管理文件管理 網絡功能 1、UNIX外的一層“殼”,它是UNIX與用戶的界面。2、Shell承擔鍵盤命令行解釋程序的功能,把用戶的指 令轉譯成UNIX系統能夠理解的意義,交系統執行3、Shell同時又是一種程序設計語言UNIX系統的層次結構2一、Shell簡介1、Shell分類分類 Bourne shellC shell標準Shell,其發明人S.R.Bourne,因此也稱B Shell B Shell的語法和功能較這其它Shell簡單; 程序設計方便
2、,并且程序執行快捷; 缺省提示符為“$”特點: B Shell的語法和功能較這其它Shell簡單; 程序設計方便,并且程序執行快捷; 缺省提示符為“$”特點:加州大學Berkeley分校首先使用的Shell,其語法與C語言類似。 提供了許多便于交互的功能,如別名(alias)、文件名自動匹配及歷史記錄等,可減少用戶的擊鍵次數,節省輸入時間。缺省提示符為“ % ”特點:3一、Shell簡介Korn ShellKorn Shell是AT&T貝爾實驗室David Korn所開發,是Bourne shell的增強版本,綜合了B Shell和C Shell的特點和約定,并且比B Shell和C Shel
3、l的執行速度更快。 Korn shell的默認提示與環境文件,跟B Shell一樣“$”。 用戶注冊后運行哪個Shell是可以改變的,如果要求系統管理員把/bin/csh改為/bin/sh,那么用戶注冊后啟動的不是C Shell,而是B Shellchr : * : 103 : 100 : hujs : /home/chr : /bin/csh 4一、Shell簡介2、Shell工作環境工作環境 USER : 運行該shell的用戶名 HOME: 該用戶的注冊目錄 TERM: 用戶使用的終端類型 PATH: 所選擇的命令搜索路徑 每一Shell進程都有一些特定的變量來表征它當時的屬性:5一、S
4、hell簡介2、Shell工作環境工作環境 在UNIX系統中,根據所啟動的Shell的不同,UNIX執行不同的文件來設置相應的屬性。由于UNIX是多用戶系統,每個用戶都可以建立與其他用戶不同的運行環境,因此這些文件放在每一用戶的注冊目錄中。 在B Shell進程啟動時,系統執行用戶注冊目錄中的 .profile文件,設置Shell變量的值;如果用戶啟動C Shell進程,系統會執行注冊目錄中的.cshrc和.login文件來設置相應的屬性。6一、Shell簡介2、Shell工作環境工作環境 C Shell 兩個隱藏文件的幾點說明:1)哪些命令要寫到哪個文件,只有一些約定俗成的習慣。 將Shel
5、l變量的設置或賦值放在.cshrc文件中,將環境變量及終端特性的設置放在.login,并沒有是嚴格的規定。但要注意不能寫重2) 文件中的命令可以在Shell運行時在交互方式下使用。 % set path=($ path /home/chr/temp) 這種改變僅在當前Shell下起作用,在Shell退出之后便不起作用了。如果要使其長期有效,則應寫到.cshrc文件中7一、Shell簡介2、Shell工作環境工作環境 )如果用戶的注冊目錄中沒有這兩個文件,則系統采用缺省設置 系統的缺省設置位于usr/lib或某個有關的目錄中(依所采用的UNIX的不同而不同)。用戶可將其復制到自己的注冊目錄中,根
6、據自己的喜好進行調整。)用戶在編輯修改自己的兩個隱藏文件后,它們并不能立即 起作用 如果要使其在當前Shell 下起作用,可用下列命令:% source .login % source .cshrc83、通配符及特殊字符、通配符及特殊字符 1)通配符)通配符 *匹配任意字符串,但不包括以“.”開頭的串;?匹配任一個字符;匹配方括號所括住的字符組。% ls l *.c% du flt*.dat一、Shell簡介93、通配符及特殊字符、通配符及特殊字符 1)通配符)通配符 *.c匹配所有后綴帶.c的文件名;*test.c匹配所有文件名的后半部分為test.c的文件名;abcd匹配文件名abd,ac
7、d;a?d 匹配所有以a開頭,以c結尾,a與c這間只有一個字符 的文件名,如abc,adc,a.ca-z*所有以小寫字母開頭的文件名 例:一、Shell簡介103、通配符及特殊字符、通配符及特殊字符 2) 特殊字符特殊字符 ;標志命令行結束,但不換行; |管道線標志; 輸入輸出重定向;$變量的訪問(取值); 轉義字符,它其后字符失在Shell中的特殊意義 除通配符外,還有一些字符對UNIX具有特殊意義,稱為了特殊字符。一、Shell簡介113、通配符及特殊字符、通配符及特殊字符 2) 特殊字符特殊字符 此外,各種括號也有其特殊的作用,如小括號( )括住的是一串命令,Shell創建一個子Shel
8、l執行;小括號( )在csh的流程控制中,還用來括住if和while 的流程控制表達式。在sh中,中括號 可以代替test命令執行流程控制的判斷功能。在Shell流程控制令還可以利用命令表執行的出口狀態來進行判斷,命令表用大括號 括住。一、Shell簡介123、通配符及特殊字符、通配符及特殊字符 3) 轉義字符轉義字符 $ echo * file1 file2 file3 $ echo * * * ”*” * file1 file2 file3 * * 轉義字符的作用是取消特殊字符在Shell中的特殊含義。反斜線、單引號、雙引號” ”,都使*失去了在Shell中的特殊含義,使echo命令回送字
9、符*本身一、Shell簡介133、通配符及特殊字符、通配符及特殊字符 3) 轉義字符轉義字符 轉義字符使其后的那個字符失去在Shell中的特殊意義; 單引號的作用,是不對所括的通配符進行解釋,從而使其失去它在Shell中的特殊意義; 雙引號對不包括反斜線,單引號 ,雙引號” ”,及$號的字符串來說,與單引號作用相同,對于包括上述特殊字符的內容,要進行命令和參數的替換。(p64)一、Shell簡介14 UNIX的Shell即是一種命令行解釋程序,也是一種程序設計語言。 Shell是一種解釋性的程序設計語言,不像其他高級語言要先把源程序經過編譯形成目標程序,再連接成可執行的目標碼方可執行。對程序語
10、句逐行解釋,逐行執行。 一、Shell簡介4、Shell 程序及其執行程序及其執行 154、Shell 程序及其執行程序及其執行 Shell程序(program),又稱為Shell腳本(script),Shell命令文件,Shell過程(procedure) 一個簡單的Shell程序可以只由一個或幾個簡單的命令構成,而調試X窗口示例程序unixwin.c,要反復執行編輯、編譯連接和程序執行三個步驟: 一、Shell簡介16$bash run.sh basicwin 4、Shell 程序及其執行程序及其執行 其中basicsin是傳遞給程序run.sh對應于$1的實參。 由于文本文件的缺省許可機
11、制為 rw-r-r-(644),即無論誰都沒有執行權。所以在執行程序時,使用以下格式。 $ bash run.sh basicwin一、Shell簡介174、Shell 程序及其執行程序及其執行 實際上Shell程序比較復雜,程序中往往要用到變量及其賦值,用到流程控制。由于不同的Shell程序設計語言的變量定義及流程控制的語法各有不同,所以應指明是那種Shell語言編寫。為此,一般要求在程序的第1行開頭處寫上: # ! /bin/sh 或 #! /bin/cshShell程序中,可以用#來標志其后的文本是注釋一、Shell簡介185、簡單的、簡單的Shell 程序程序 $more myscri
12、pt#! /bin/cshdatecal$一、Shell簡介19二、二、Shell程序設計程序設計1、Shell 兩個基本命令兩個基本命令 在一個程序行中,字符#以后的部分被Shell看成是注釋部分而不去解釋,例如: 1)注釋(Comment) $more myscript #! /bin/csh#This is a comment#.20二、二、Shell程序設計程序設計1、Shell 兩個基本命令兩個基本命令 echo命令用來在標準輸出上顯示跟隨其后的字符,echo命令是在Shell程序中最常用的命令,例如: 2)echo 命令 $ echo Hello There Hello There
13、$注意:echo顯示內容后會自動加上換行符212、Shell 變量變量 Shell變量一般分為三種:用戶定義變量,環境變量,系統變量。其中用戶變量在編程過程中使用最多,系統變量在對參數判斷和命令返回值判斷會使用($n),環境變量主要是在程序運行的時候需要設置。又可分為全局和局部變量,環境變量在退出Shell后仍然起作用,所以稱為全局變量。在UNIX系統中,環境變量名一般有些是約定俗成(P62)。二、二、Shell程序設計程序設計222、Shell 變量變量 變量:在程序執行過程中允許改變的量 UNIX Shell程序設計語言的變量類型比較簡單,只有字符類型的變量,也就是說變量的值都有是字符或字
14、符串。程序中出現的數字,也是基于字符類型。變量名:以字母開頭,由字母、數字和下劃線組成;變量值:是一些字符串;1) 用戶定義變量二、二、Shell程序設計程序設計232、Shell 變量變量 $ a=10 $ echo $a 語法結構:變量=字符串或數值 要取得變量的值,需要在變量名前加上$符號,例如:注注:在:在B Shell的變量賦值中的變量賦值中不允許不允許在等號(在等號(=)的兩邊)的兩邊有空格有空格出現出現 。 1) 用戶定義變量二、二、Shell程序設計程序設計24在變量取值時可以用大括號把變量括住,以便強調指出變量名(程序vary)$ echo $mc (取變量mc的值) $ e
15、cho $hitoday (取變量hi的值,并和today組合)$ echo ” $mc ” (取變量mc的值) $ echo” $hi ” today (取變量hi的值,并和today組合) 2、Shell 變量變量 1) 用戶定義變量二、二、Shell程序設計程序設計25訪問Shell變量的值時,應在變量名前加$ $ echo $ mc (取變量mc的值) medical.cumt$ echo $abc (abc的值是空串,無顯示) 2、Shell 變量變量 1) 用戶定義變量二、二、Shell程序設計程序設計26% echo $hitoday$hitoday單引號 使其括住的特殊字符失去
16、在Shell中的特殊含義;雙引號” 在遇到$等特殊字符時,會進行變量或參數的替換;反引號 可以進行命令結果的替換2、Shell 變量變量 1) 用戶定義變量二、二、Shell程序設計程序設計272、Shell 變量變量 $ more myscript#! /bin/shcommand=”ls”options=”-l”filespec=”*.doc” 或 filespec=”$command $options $filespec 1) 用戶定義變量(s1t3)二、二、Shell程序設計程序設計28二、二、Shell程序設計程序設計2、Shell 變量變量 2) 預定義變量和環境變量預定義變量和環
17、境變量 用戶可以自己命名變量并為變量賦值,但有些名字如USER、HOME、PATH等,已被系統采用,用戶不應再用它們作為變量名。Shell的這些是系統“預定義”的變量,系統會在創建Shell進程時為預定義變量自動賦值。 有些預定義變量的值對某一特定用戶的特定Shell是不能隨便改變的(如HOME等);有的預定義變量的值則可以隨用戶的命令而改變(如PATH等)。 29二、二、Shell程序設計程序設計2、Shell 變量變量 2) 預定義變量和環境變量預定義變量和環境變量 預定義變量也稱為內置環境變量: B Sh變量C sh變量/環境變量用戶名 user USER用戶注冊目錄HOMEhome H
18、OME命令訪問路徑PATHpath PATHCd命令路徑CDPATHcdpath提示符PS1prompt輔助提示符PS2 終端類型TERMterm TERM進行的ShellSHELLshell30二、二、Shell程序設計程序設計2、Shell 變量變量 2) 預定義變量和環境變量預定義變量和環境變量 環境變量:可以把變量值傳到子Shell中變量,因此環 境變量也是全局變量。 注意:在B Shell中環境變量被設置以后,必須用export命令才能使變量起作用 $PATH =.:/bin:/usr/bin:/local/bin$export PATH31二、二、Shell程序設計程序設計2、Sh
19、ell 變量變量 3) 系統變量系統變量格 式意 義$0Shell命令或程序名$1$9從1到9的命令參數$*所有命令參數$#命令參數的個數$?前個命令返回的狀態值(exit value)$-強制設定當前使用Shell的選項$當前使用中Shell的進程識別碼pid Shell本身有一些變量屬于系統變量,這些變量只有Shell可以設置,用戶只能引用。 32二、二、Shell程序設計程序設計2、Shell 變量變量 3) 系統變量系統變量 當用戶執行一個Shell命令時,Shell將創建10個位置參數,分別用$0,$1,$2,$9表示。其中$0表示所指行的Shell命令或程序名,而$1,$2,$9則
20、依次表示第1個,第2個,第9個命令行參數。 33二、二、Shell程序設計程序設計2、Shell 變量變量 3) 系統變量系統變量 一般情況下,$ 與$*的作用相同,表示除$0以外的位置參數。但在有雙引號”時意義不同(p78)。 ”$*”對應于”$1,$2,$9” 為一個字符串; ”$” 對應于”$1”,”$2”,”$9” 為分開的字符串。 34AA BB CC DD EE FF GG HH% cat test.sh(test.sh)echo $1 $2 $3 $4 $5 $6 $7 $8% chmod +x test.sh% test.sh AA BB CC DD EE FF GG HH二、
21、二、Shell程序設計程序設計2、Shell 變量變量 3) 系統變量系統變量35 shift:Shell在執行shift命令之后,將把$1置換為$2,而$2置換為$3,依次類推。 二、二、Shell程序設計程序設計2、Shell 變量變量 3) 系統變量系統變量36二、二、Shell程序設計程序設計3) 系統變量系統變量(s1t4)$ cat file1a b c d e f g h i j$ echo $# $*10 a b c d e f g h i j$ shift$ echo $# $*$ shift$ echo $# $*$ shift9 b c d e f g h i j8 c
22、d e f g h i j$ echo $# $*$ shift$ echo $# $*$ shift7 d e f g h i j6 e f g h i j$1$2 $3 $4 $5 $6 $7 $8 $9 $1037二、二、Shell程序設計程序設計3) 系統變量系統變量$ echo $# $*$ shift$ echo $# $*$ shift$ echo $# $*$ shift$ echo $# $*$ shift5 f g h i j4 g h i j3 h i j2 i j1 j$ echo $# $*38二、二、Shell程序設計程序設計3) 系統變量系統變量hellogood
23、 morning everyone%$ cat test.sh(s1t5)echo $1shiftecho $1 $2 $3$ test.sh hello good morning everyone39二、二、Shell程序設計程序設計3) 系統變量系統變量$ chmod +x test.sh AA BB CC$ test.sh AA BB CCux=$1 ; uy=$2uz=$3 echo $ux echo $uy $uz$ cat test.sh(s1t6)40二、二、Shell程序設計程序設計2、Shell 變量變量 4) 變量的作用域:變量的作用域:局部變量局部變量和和全局變量全局變量
24、 41二、二、Shell程序設計程序設計2、Shell 變量變量 4) 變量的作用域:局部變量和全局變量變量的作用域:局部變量和全局變量 42二、二、Shell程序設計程序設計2、Shell 變量變量 4) 變量的作用域:局部變量和全局變量變量的作用域:局部變量和全局變量 一般情況下,變量僅在給其賦值的Shell上起作用,即為局部變量。export命令可將局部變量轉化為全局變量; $ export mc 43二、二、Shell程序設計程序設計3、變量和命令替換、變量和命令替換 (1) $ name :- word 如果name有值且非空,取該值,否則取word為它的值,但name變量本身的值不
25、變; (2) $name :+ word 若變量name有值且非空,取word為它的值,否則name的值不變(仍為空); (3) $name := word 如果name有值且非空,取該值,否則取word為它的值,同時將word賦給變量name,則name被賦值 見s1t1(4) $name :?word 測試是否對name賦值,若賦,結果為name的值,否則顯示word并退出 44二、二、Shell程序設計程序設計$ name1=car $ name2=boat $ echo $ name1 car $ echo $ name2 boat $ echo $ name3 tem tem $ e
26、cho $ name1: seat door cardoor $ echo $name3 : seat door seatdoor $ echo $name1 :+ seat seat$ echo $name1:=plane car $ echo $name3:=plane plane 3、變量和命令替換、變量和命令替換 name3?45二、二、Shell程序設計程序設計 B Shell和C Shell都提供了一種利用命令的執行結果替換給變量的賦值方法,這就是利用反引號 的命令替換。把一個命令用反引號 括起來,就可以把命令的執行結果賦給一個變量。3、變量和命令替換、變量和命令替換 46二、二、
27、Shell程序設計程序設計$ now= date $ echo $nowTue Dec 10 23:22:12 CST 20023、變量和命令替換、變量和命令替換 見s1t7 47單引號括在單引號中的字符一律當作普通字符解釋,特殊字符失去在Shell中的特殊含義;(2P38)二、二、Shell程序設計程序設計4 4、shell變量運算變量運算 A=good boyecho $Agood boy反斜杠反斜杠后面字符的特殊含義被取消(P65)反引號反單引號中的內容被看成是命令(P66)雙引號” ,除美元符號$、反撇號、反斜杠以外,其余的作為字符串不加處理直接傳送給程序。在遇到$等特殊字符時,會進行
28、變量或參數的替換; (P65,2P38)A=abcB=“The value is $A”echo $BThe value is abcThis date is : datename=“swpu”echo $nameecho $nameswpu$name48 Shell有一個專門的命令expr,用于對整數實施算術運算、邏輯運算和字符串比較。由于expr將每個字符和數字都看作是獨立的變元,所以用空格將運算符和值隔開。 (s2t6)二、二、Shell程序設計程序設計4 4、shell變量運算變量運算 例如:$c=expr $a + $b$d=expr $a / $b$e=expr $a * $b字符
29、串比較$R=expr abcdefg:abcd(從第一個字符開始,完全一樣)$echo $R注意:$a, $b和運算符之間一定要有空格。49二、二、Shell程序設計程序設計4 4、shell變量運算變量運算 50利用expr進行算術運算要注意:()、操作數和運算符之間要用空格分開,因為變量是字符類型,如果不用空格,可能被認為是同一個字符串。 ()、算式合法的運算符是:+、-、*、(或“*“、*)/和%。由于*和/在shell中有特殊意義,所以需要做轉義處理。 ()、合法的操作數是整數 二、二、Shell程序設計程序設計4 4、shell變量運算變量運算 51% expr 5 * 10 % e
30、xpr 5 “*“ 10 % expr 5 * 10 % expr “5 * 10“ % count= expr $count + 1 (s2t7)二、二、Shell程序設計程序設計4 4、shell變量運算變量運算 52課堂練習改寫表達式(swpu):2*3+4/25*4+9%3計算goodafternoon和good匹配的字符數53 首先通過vi創建一個Shell正文文件,然后使用chmod命令使文件變成可執行文件,最后鍵入該文件名即可執行該文件。 二、二、Shell程序設計程序設計5 5、建立建立shell文件文件 例如,創建一個名為scr1的Shell文件$vi scr1541、tes
31、t 命令命令三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計 test是sh程序設計中的一個測試命令,其目的是測試其后的表達式的值,如果表達式的值為“真”,則test命令返回真值,即返回0;否則返回非0(1)。 test命令格式 :test expr 或 expr % test d /home/usera & echo ” directory usera exists” % test d /home/usera | | echo ” usera not exists or not a dir” 551、test 命令命令 test命令大量用于sh程序設計中的流程控制表達式的求
32、值。可以對文件、字符串、數字(整數)表達式求值,也可進行表達式的簡單組合。 1) test命令用于對文件的測試 格式:test d f r w x s filename -d filename表示文件filename存在且為目錄文件;-f filename表示文件filename存在且為普通文件; -r filename表示文件filename存在且可讀; 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計561、test 命令命令-w filename表示文件filename存在且可寫; -x filename表示文件filename存在且可執行; -s filename表示
33、文件filename存在且長度非零; % test d /home/usera% echo $?0三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計571、test 命令命令2)test 命令用于對字符串s進行測試 test s字符串s非空串;test n s字符串s非空串;test z s 字符串s空串;test s1 = s2字符串s1與s2相同;test s1!= s2字符串s1與s2不同; 在利用test進行兩個字符串的比較時,等號(=)和不等號(!=)的兩邊必須有空格,與sh變量的賦值相反。 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計581、t
34、est 命令命令3)test 命令用于對整數n進行測試 test n1 eq n2整數n1和n2相等; test n1 ne n2整數n1和n2不相等; test n1 lt n2整數n1小于n2; test n1 le n2整數n1小于等于n2; test n1 gt n2整數n1大于n2; test n1 ge n2整數n1大于等于n2。三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計591、test 命令命令 如果shell變量的值是“整數”,但它仍是字符型變量。test命令對整數進行的測試比較是test對這些字符串類型的整數進行解釋的結果。因此用“=”和“-eq”進行
35、比較,機理是不同。s2t8三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計601、test 命令命令4) test測試的邏輯組合 -a與-o或! 非% test r /home/usera % test r /home/usera a d /home/usera test命令也可用方括號 代替:test f myfile 可寫作 -f myfile ,方括號與參數之間要有空格隔開。 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計612、條件控制(if結構和case分支) 結構化程序設計的三種基本結構:順序結構:命令表 分支結構:if和case語句 循環結構
36、 :for、while和until循環 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計622、條件控制(if結構和case分支) 1) if 結構 沒有分支結構的條件控制。if語句可以實現更復雜的條件控制。if命令認為退出狀態值為0時“TRUE”,而為其他值時為“FALSE”,與C語言是相反的。具有以下幾種形式: 第一種(P68,s2t4) :if expression then command list fi 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計632、條件控制(if結構和case分支) 1) if 結構 第二種 (P68,s2t4) :if
37、 expression then command list1 else command list2 fi 第三種(P69,s2t5) :if expression1 then command list1elif expression2then command list2else command list3 fi 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計64 綜合例題:用test命令來比較字符串 P69 用test命令來比較整數 P7265流程控制編程例子流程控制編程例子if -r “$1” ; then echo you have read permission on
38、 the file.fiif -w “$1” ; then echo you have write permission on the file.fi if -x “$1” a ! d “$1” ;thenecho you have execute permission on the file.fi它檢測你是否對該文件有執行權限以及文件是否不是一個目錄(如果文件如果文件是一個目錄,執行是一個目錄,執行權限則意味著目錄權限則意味著目錄可否被打開可否被打開)。 操作符優先級就是操作符優先級就是shell處理操作符的次序。此概念與數學中的算術優處理操作符的次序。此概念與數學中的算術優先級一樣。先級一
39、樣。 -x “$1” a ! d “$1”等價于等價于(-x “$1”) a ( ! d “$1”)。文件測試首先被文件測試首先被執行,然后是符號!,然后是執行,然后是符號!,然后是AND和和OR測試。測試。 66腳本運行例子腳本運行例子作為以上輸出一個例子,假定對當前目錄執行ls -l,結果包含如下內容:-rwxr-xr-x 1 cam users 2987 Jan 10 20:43 adventure-rw-rr 1 cam users 30 Jan 10 21:45 alice-rrr- 1 root root 58379 Jan 11 21:30 coredrwxr-xr-x 2 ca
40、m users 1024 Jan 10 21:41 dodo$ fileinfo adventure You have read permission on the file.You have write permission on the file.You have execute permission on the file.672、條件控制(if結構和case分支) 2) case 分支三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計682、條件控制(if結構和case分支) 2) case 分支(P74,75) case word in pattern1) part1
41、_list1; pattern2) part2_list1; ?) default_list1; *) default_list2; esac 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計注意:“*”用來匹配任意值,”?”匹配一個字符692、條件控制(if結構和case分支) 三、條件測試和簡單的三、條件測試和簡單的Shell程序設計程序設計701、循環(for、while和until循環) 四、復雜的四、復雜的Shell程序設計程序設計711、循環(for、while和until循環) 四、復雜的四、復雜的Shell程序設計程序設計 Shell程序設計語言用程序設計語言
42、用for、while和和until實現實現命令表命令表的的重復執行重復執行。和其它程序設計語言類似,。和其它程序設計語言類似,for循環常用于循環常用于循環次數確定循環次數確定的情況。的情況。while和和until常用于循環次數需要常用于循環次數需要根據條件根據條件判斷判斷的情況。的情況。1) for 循環(循環(P76) 語法語法: for var in word1 word2 word3 wordn do commandlist done 721、循環(、循環(for、while和和until循環)循環) 說明:說明:a)變量變量var的可能的取值的可能的取值word1 word2 wo
43、rd3 wordn 必須一一列出;必須一一列出;b)若省略若省略in及其后的取值表,則相當于有及其后的取值表,則相當于有in $*,系統系統 對每一個位置變量執行一次命令表;對每一個位置變量執行一次命令表;(p76-copy)c)在取值列表中可以采用通配符。在取值列表中可以采用通配符。1) for 循環循環 四、復雜的四、復雜的Shell程序設計程序設計731、循環(for、while和until循環) 1) for 循環 # 例:例:fruits.sh for fruits in apples pears oranges do echo $fruits are fruits doneappl
44、es are fruitspears are fruitsoranges are fruits四、復雜的四、復雜的Shell程序設計程序設計741、循環(、循環(for、while和和until循環)循環) 2) while循環和循環和until循環循環 while循環和循環和until循環可以看作是循環可以看作是for循環和循環和if條件的功條件的功能的組合,二者都以一個能的組合,二者都以一個命令表命令表的的出口狀態出口狀態為判斷條件,決為判斷條件,決定循環中的命令表是否執行,差別在于第一次執行之前是否定循環中的命令表是否執行,差別在于第一次執行之前是否先判斷,其語法:先判斷,其語法: wh
45、ile comdlist1 until comdlist1 do comdlist2 do comdlist2 done done四、復雜的四、復雜的Shell程序設計程序設計751、循環(、循環(for、while和和until循環)循環) 2) while循環和循環和until循環循環 while循環和循環和until循環的判斷條件可以是一個命令表循環的判斷條件可以是一個命令表(comdlist),),循環根據循環根據命令表的最后命令表的最后的出口狀態是否的出口狀態是否“真真”來決定下一個命令表是否執行。來決定下一個命令表是否執行。comdlist1的出的出口狀態應能改變,否則程序將陷入死
46、循環口狀態應能改變,否則程序將陷入死循環# 例:例: while.sh while -f filea do echo Before sleep sleep 5 echo sleep done done四、復雜的四、復雜的Shell程序設計程序設計761、循環(、循環(for、while和和until循環)循環) 2) while循環和循環和until循環循環 例題例題(s2t9): count=1 while -n $ * do echo this is a parameter number $count $1 shift count=expr $count + 1 done四、復雜的四、復雜
47、的Shell程序設計程序設計771、循環(、循環(for、while和和until循環)循環) 2) while循環和循環和until循環循環 例題例題(s2t10):count=1 until -z $ * echo this is a parameter number $count $1 shift count=expr $count + 1 done四、復雜的四、復雜的Shell程序設計程序設計781、循環(、循環(for、while和和until循環)循環) 2) while循環和循環和until循環循環 until與與while語句具有類似的語法格式和功能語句具有類似的語法格式和功能
48、,不同不同的是的是while中中expr的值為的值為True時時,shell執行命令組執行命令組;而而until中當中當expr的值為的值為False時時,shell才執行那組命令才執行那組命令. 四、復雜的四、復雜的Shell程序設計程序設計 每次執行到每次執行到until語句時都先執行循環語句塊,然語句時都先執行循環語句塊,然后測試后測試expr的值,的值,False時繼續下一次循環,否則終止時繼續下一次循環,否則終止。791、循環(、循環(for、while和和until循環)循環) 2) while循環和循環和until循環循環 void main() int i(1),sum(0);
49、 while(i=10) sum+=i; i+; cout“sum=“sumendl;四、復雜的四、復雜的Shell程序設計程序設計801、循環(for、while和until循環) 3) shift 命令 由前面位置參數的學習可知,由前面位置參數的學習可知,UNIX只提供提了十個只提供提了十個位置變量,而且其中之一為指令本身,因此當指令的參數位置變量,而且其中之一為指令本身,因此當指令的參數超出九個時,就會出現問題。超出九個時,就會出現問題。Shell提供了提供了shift指令,使參指令,使參數能夠數能夠移位移位。這樣便可將取用過和參數丟掉,把位置空出。這樣便可將取用過和參數丟掉,把位置空出給下個參數使用。給下個參數使用。 四、復雜的四、復雜的Shell程序設計程序設計81% cat tshift% echo $# $*% shift% echo $# $*% shift% echo $# $*% shift% echo $# $*% shift% echo $# $*% shift$ tshift a b c d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 邏輯思維訓練課程教案:邏輯推理與論證方法
- 長方體結構認識與性質學習教案
- 電力系統運行與維護習題集
- 音樂分析考試試題及答案
- 醫院停水考試試題及答案
- 醫院庫房考試試題及答案
- 六一俱樂部活動方案
- 六一光影活動方案
- 六一創意夜晚活動方案
- 六一寵物活動策劃方案
- (完整版)室內裝飾裝修施工組織設計
- 俄羅斯勝利日祝福郵件英語
- 2023年甘肅省酒泉市中考語文試卷【含答案】
- 幼兒園小班健康教育保護眼睛課件
- 2023-2024學年河南省濮陽市小學語文五年級期末提升測試題附參考答案和詳細解析
- 中華人民共和國標準施工招標文件版
- 延長石油筆試題庫
- 阿里巴巴開店注意事項
- 思想政治理論綜合實踐知到章節答案智慧樹2023年太原理工大學
- 臍灸技術評分標準
- 西師版四年級下冊100道口算題大全(全冊齊全)
評論
0/150
提交評論