




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第11章 Shell的使用對(duì)于學(xué)習(xí)過(guò)對(duì)于學(xué)習(xí)過(guò)DOS命令的人都知道從命令行輸入命令。每次命令的人都知道從命令行輸入命令。每次輸入一個(gè)命令,可得到系統(tǒng)的響應(yīng)。但是有時(shí)間需要一下子連輸入一個(gè)命令,可得到系統(tǒng)的響應(yīng)。但是有時(shí)間需要一下子連續(xù)執(zhí)行好幾個(gè)命令,才能得到最后的結(jié)果。然后在續(xù)執(zhí)行好幾個(gè)命令,才能得到最后的結(jié)果。然后在linux環(huán)境中環(huán)境中,大家可以利用,大家可以利用shell程序或程序或shell腳本來(lái)實(shí)現(xiàn)這一目的。腳本來(lái)實(shí)現(xiàn)這一目的。Shell程序是通過(guò)文本編輯程序放在一個(gè)文件中的一系列程序是通過(guò)文本編輯程序放在一個(gè)文件中的一系列Linux命令命令和實(shí)用程序。當(dāng)和實(shí)用程序。當(dāng)shell在執(zhí)
2、行在執(zhí)行shell程序時(shí),程序時(shí),Linux系統(tǒng)會(huì)非常自系統(tǒng)會(huì)非常自然的一個(gè)接一個(gè)地解釋和執(zhí)行輸入的每一個(gè)命令。然的一個(gè)接一個(gè)地解釋和執(zhí)行輸入的每一個(gè)命令。Shell就是為就是為了在終端運(yùn)行程序,是操作系統(tǒng)的一部分,用來(lái)與用戶打交道了在終端運(yùn)行程序,是操作系統(tǒng)的一部分,用來(lái)與用戶打交道,并且可以用來(lái)協(xié)調(diào)各個(gè)命令。,并且可以用來(lái)協(xié)調(diào)各個(gè)命令??梢韵裨诳梢韵裨贚inux下執(zhí)行任何其他命令一樣編寫(xiě)并執(zhí)行下執(zhí)行任何其他命令一樣編寫(xiě)并執(zhí)行shell程序??梢栽诔绦颉?梢栽趕hell程序內(nèi)執(zhí)行其它的程序內(nèi)執(zhí)行其它的shell程序,只要這些程序,只要這些shell程序在查找路徑中。程序在查找路徑中。shel
3、l程序跟其他任何高級(jí)語(yǔ)言一樣程序跟其他任何高級(jí)語(yǔ)言一樣,具有其自己的語(yǔ)法特點(diǎn)。例如定義變量、條件語(yǔ)句、循環(huán)特,具有其自己的語(yǔ)法特點(diǎn)。例如定義變量、條件語(yǔ)句、循環(huán)特點(diǎn)等。本章將討論這些內(nèi)容。點(diǎn)等。本章將討論這些內(nèi)容。11.1 創(chuàng)建和執(zhí)行創(chuàng)建和執(zhí)行shell程序程序 學(xué)習(xí)腳本編程的目的是實(shí)現(xiàn)在有些場(chǎng)合用一個(gè)命令來(lái)學(xué)習(xí)腳本編程的目的是實(shí)現(xiàn)在有些場(chǎng)合用一個(gè)命令來(lái)實(shí)現(xiàn)一些常用的命令集或者處理某些特定的問(wèn)題,避免多次實(shí)現(xiàn)一些常用的命令集或者處理某些特定的問(wèn)題,避免多次輸入同一命令集的麻煩。對(duì)于不同的輸入同一命令集的麻煩。對(duì)于不同的shell程序而言,其編程序而言,其編程語(yǔ)法也有所不同。常見(jiàn)的程語(yǔ)法也有所不
4、同。常見(jiàn)的shell腳本是腳本是bash和和tcsh,其命,其命令和語(yǔ)法與令和語(yǔ)法與C語(yǔ)言類(lèi)似。語(yǔ)言類(lèi)似。Shell腳本編程的準(zhǔn)備工具為文本編輯器(腳本編程的準(zhǔn)備工具為文本編輯器(vi、vim、gedit等)、腳本解釋程序(等)、腳本解釋程序(bash、tcsh等)、其他工具(等)、其他工具(用來(lái)擴(kuò)充用來(lái)擴(kuò)充Shell 腳本的功能,如:腳本的功能,如:grep、wc等)。等)。shell腳腳本是指使用用戶環(huán)境本是指使用用戶環(huán)境shell提供的語(yǔ)句所編寫(xiě)的提供的語(yǔ)句所編寫(xiě)的Linux命令文命令文件??梢岳梦淖志庉嬈鬟M(jìn)行程序錄入和編輯加工來(lái)建立件??梢岳梦淖志庉嬈鬟M(jìn)行程序錄入和編輯加工來(lái)建立s
5、hell程序,與建立普通文本文件的方式相同。程序,與建立普通文本文件的方式相同。 接下來(lái)將舉例介紹其創(chuàng)建與執(zhí)行。接下來(lái)將舉例介紹其創(chuàng)建與執(zhí)行。(1)在)在bash環(huán)境下創(chuàng)建一個(gè)環(huán)境下創(chuàng)建一個(gè)shell別名文件,命名為別名文件,命名為example。用文本編輯器編輯其文件內(nèi)容如下:。用文本編輯器編輯其文件內(nèi)容如下:alias search=whereisalias dir=lsalias copy=cp(2)Linux下可以使用多種方法來(lái)執(zhí)行下可以使用多種方法來(lái)執(zhí)行shell程序。程序。#chmod+x byname /使用使用chmod命令來(lái)執(zhí)行。命令來(lái)執(zhí)行。#echo $PATH /查找路徑
6、命令。查找路徑命令。在不同的環(huán)境中,執(zhí)行在不同的環(huán)境中,執(zhí)行shell腳本的命令是不一樣。例腳本的命令是不一樣。例如,還可以從命令行上執(zhí)行如下表:如,還可以從命令行上執(zhí)行如下表:11.2 變量Linux下的下的shell編程已經(jīng)是一種非常成熟的編程語(yǔ)言。編程已經(jīng)是一種非常成熟的編程語(yǔ)言。其支持各種類(lèi)型的變量,共有其支持各種類(lèi)型的變量,共有3種主要的變量類(lèi)型:種主要的變量類(lèi)型:環(huán)境變量:用戶不必去定義環(huán)境變量,就可以直接在環(huán)境變量:用戶不必去定義環(huán)境變量,就可以直接在shell程序中使用。因?yàn)槠錇橄到y(tǒng)環(huán)境的一部分,由系統(tǒng)創(chuàng)程序中使用。因?yàn)槠錇橄到y(tǒng)環(huán)境的一部分,由系統(tǒng)創(chuàng)建和賦值。某些變量還能在建和
7、賦值。某些變量還能在shell程序中進(jìn)行修改,例如,程序中進(jìn)行修改,例如,用戶可以通過(guò)相應(yīng)的環(huán)境變量來(lái)改變系統(tǒng)默認(rèn)的命令提示符用戶可以通過(guò)相應(yīng)的環(huán)境變量來(lái)改變系統(tǒng)默認(rèn)的命令提示符形式;形式;內(nèi)部變量:由系統(tǒng)提供。與環(huán)境變量不同,其不能被內(nèi)部變量:由系統(tǒng)提供。與環(huán)境變量不同,其不能被用戶修改;用戶修改;用戶變量:在編寫(xiě)用戶變量:在編寫(xiě)shell過(guò)程中由用戶定義的??梢栽谶^(guò)程中由用戶定義的??梢栽趕hell程序內(nèi)任意使用和修改。這種變量只對(duì)用戶有意義,程序內(nèi)任意使用和修改。這種變量只對(duì)用戶有意義,不會(huì)對(duì)系統(tǒng)產(chǎn)生影響;不會(huì)對(duì)系統(tǒng)產(chǎn)生影響;shell編程和其他編程的主要區(qū)別是編程和其他編程的主要區(qū)別是
8、shell編程中的變量編程中的變量是非類(lèi)型性質(zhì)的。是非類(lèi)型性質(zhì)的。11.2.1 給變量賦值給變量賦值 在編程過(guò)程中,需要對(duì)其進(jìn)行賦值才能實(shí)現(xiàn)變量的真在編程過(guò)程中,需要對(duì)其進(jìn)行賦值才能實(shí)現(xiàn)變量的真正價(jià)值,在正價(jià)值,在shell編程中也不例外。編程中也不例外。 注意:在注意:在pdksh和和bash環(huán)境下,必須確保在等號(hào)(環(huán)境下,必須確保在等號(hào)()前后沒(méi)有空格。)前后沒(méi)有空格。shell編程語(yǔ)言中使用的變量為非類(lèi)型性質(zhì)的變量。同編程語(yǔ)言中使用的變量為非類(lèi)型性質(zhì)的變量。同一變量在同一程序中被賦值成不同類(lèi)型來(lái)使用是可能的。例一變量在同一程序中被賦值成不同類(lèi)型來(lái)使用是可能的。例如,一個(gè)變量可以一次用來(lái)存
9、放數(shù)值類(lèi)型另一次存放字符串如,一個(gè)變量可以一次用來(lái)存放數(shù)值類(lèi)型另一次存放字符串。但是,應(yīng)該注意盡量避免這樣做。但是,應(yīng)該注意盡量避免這樣做。 如果字符串中不含空格,就可以通過(guò)上述命令實(shí)現(xiàn)。如果字符串中不含空格,就可以通過(guò)上述命令實(shí)現(xiàn)。但是,如果字符串中包含有空格話,就要對(duì)申明的字符串用但是,如果字符串中包含有空格話,就要對(duì)申明的字符串用單引號(hào)擴(kuò)起來(lái)??梢酝ㄟ^(guò)如下語(yǔ)句對(duì)字符串變量進(jìn)行賦值:?jiǎn)我?hào)擴(kuò)起來(lái)??梢酝ㄟ^(guò)如下語(yǔ)句對(duì)字符串變量進(jìn)行賦值:11.2.2 訪問(wèn)變量在在shell程序中要訪問(wèn)變量,可以通過(guò)變量名前加程序中要訪問(wèn)變量,可以通過(guò)變量名前加“$”(美元符)的形式來(lái)訪問(wèn)變量的值。例如,有個(gè)變
10、量(美元符)的形式來(lái)訪問(wèn)變量的值。例如,有個(gè)變量var,通過(guò)通過(guò)$var的形式就可以對(duì)這個(gè)變量進(jìn)行訪問(wèn)了。還可以把變的形式就可以對(duì)這個(gè)變量進(jìn)行訪問(wèn)了。還可以把變量量var的值賦給變量的值賦給變量counter。實(shí)現(xiàn)變量間的值傳遞可以通過(guò)。實(shí)現(xiàn)變量間的值傳遞可以通過(guò)如下命令:如下命令:表11.5 訪問(wèn)變量命令環(huán)境counter$varPdksh和bashset counter$vartcsh11.3 位置參數(shù)位置參數(shù)是位置參數(shù)是Shell程序的一種變量,由被調(diào)用的命令行程序的一種變量,由被調(diào)用的命令行中的各自的位置決定。位置參數(shù)之間應(yīng)用空格分開(kāi),通常是中的各自的位置決定。位置參數(shù)之間應(yīng)用空格分開(kāi)
11、,通常是跟在程序名后面的參數(shù)。跟在程序名后面的參數(shù)。Shell取第一個(gè)位置參數(shù)替換程序取第一個(gè)位置參數(shù)替換程序文件中的文件中的$1,第二個(gè)替換,第二個(gè)替換$2,依次類(lèi)推。,依次類(lèi)推。$0是一個(gè)特殊的是一個(gè)特殊的變量,其內(nèi)容是當(dāng)前這個(gè)變量,其內(nèi)容是當(dāng)前這個(gè)Shell程序的文件名,因此,程序的文件名,因此,$0不不是一個(gè)位置參數(shù),在顯示當(dāng)前所有的位置參數(shù)時(shí)是不包括是一個(gè)位置參數(shù),在顯示當(dāng)前所有的位置參數(shù)時(shí)是不包括$0的。的。例如,例如,shell程序程序myname要求兩個(gè)參數(shù)(如名和姓)要求兩個(gè)參數(shù)(如名和姓),可以只用一個(gè)參數(shù),可以只用一個(gè)參數(shù)(名名)來(lái)調(diào)用來(lái)調(diào)用shell程序。但是,你不能只
12、程序。但是,你不能只利用第二個(gè)參數(shù)利用第二個(gè)參數(shù)(姓姓)來(lái)調(diào)用來(lái)調(diào)用shell程序。這里有一個(gè)程序。這里有一個(gè)shell程程序序myname,只帶了一個(gè)參數(shù),只帶了一個(gè)參數(shù)(名字名字),并在屏幕上顯示這個(gè),并在屏幕上顯示這個(gè)名字:名字:(1)編寫(xiě))編寫(xiě)shell代碼。代碼。#Name display programIf($# -eq 0)ThenEcho “Name not provided”ElseEcho “Your name is ”$1(2)執(zhí)行)執(zhí)行myname,將得到輸出結(jié)果為,將得到輸出結(jié)果為Name not provided。# . myname(3)執(zhí)行)執(zhí)行mypgm1。#
13、 . myname windy(4)得到正確輸出結(jié)果。)得到正確輸出結(jié)果。Your name is windyshell程序程序myname還說(shuō)明了還說(shuō)明了she11編程的另一個(gè)方面,即內(nèi)部變量編程的另一個(gè)方面,即內(nèi)部變量。在。在myname中的變量中的變量$ #是內(nèi)部變量,并提供傳送給是內(nèi)部變量,并提供傳送給shell程序的位置參程序的位置參數(shù)的數(shù)目。數(shù)的數(shù)目。 11.4 內(nèi)部變量?jī)?nèi)部變量是內(nèi)部變量是Linux系統(tǒng)提供的一種用于作出判定的特殊類(lèi)型的變量系統(tǒng)提供的一種用于作出判定的特殊類(lèi)型的變量。在。在shell程序內(nèi)用戶時(shí)不能修改的這些變量的。下面是一些常用到的部程序內(nèi)用戶時(shí)不能修改的這些變
14、量的。下面是一些常用到的部分內(nèi)部變量:分內(nèi)部變量:$ #:傳送給:傳送給shell程序的位置參數(shù)的數(shù)目。程序的位置參數(shù)的數(shù)目。$?:最后命令的完成碼或在?:最后命令的完成碼或在shell程序內(nèi)所執(zhí)行的程序內(nèi)所執(zhí)行的shell程序。程序。$ 0:shell程序的名稱。程序的名稱。$ *:調(diào)用:調(diào)用shell程序時(shí)所傳送的全部變?cè)膯巫址3绦驎r(shí)所傳送的全部變?cè)膯巫址?。為了表明這些內(nèi)部變量的用法,這里有一個(gè)為了表明這些內(nèi)部變量的用法,這里有一個(gè)myname的示范例子:的示范例子:(1)編寫(xiě)代碼過(guò)程。)編寫(xiě)代碼過(guò)程。#my =2#na=mypag2#nu=james#echo “Number
15、of parameters is ” $my#echo “Program name is ” $na#echo “Paramerts as a single string is ”$nu(2)執(zhí)行)執(zhí)行myname示例。示例。# . mypgm2 Sanjiv Guha(3)輸出結(jié)果顯示。)輸出結(jié)果顯示。Number of parameters is 2Program name is mypgm2Parameters as a single string is james11.5 特殊字符在在Linux shell程序中對(duì)某些特殊字符規(guī)定了特殊的含程序中對(duì)某些特殊字符規(guī)定了特殊的含義。在程序中
16、對(duì)其進(jìn)行使用時(shí),一般不要將其作為變量名或義。在程序中對(duì)其進(jìn)行使用時(shí),一般不要將其作為變量名或字符串的一部分。因?yàn)檫@樣往往會(huì)導(dǎo)致程序出錯(cuò)。如果用戶字符串的一部分。因?yàn)檫@樣往往會(huì)導(dǎo)致程序出錯(cuò)。如果用戶一定要在某些字符串中含有這類(lèi)特殊字符的話,必須利用轉(zhuǎn)一定要在某些字符串中含有這類(lèi)特殊字符的話,必須利用轉(zhuǎn)義字符反斜杠(義字符反斜杠()來(lái)實(shí)現(xiàn)。表明在此處該特殊字符不作為)來(lái)實(shí)現(xiàn)。表明在此處該特殊字符不作為特殊字符來(lái)處理。在下表中介紹了部分特殊字符極其特殊含特殊字符來(lái)處理。在下表中介紹了部分特殊字符極其特殊含義:義:11.5.1 雙引號(hào)當(dāng)字符串中含有空格時(shí),應(yīng)該用雙引號(hào)(當(dāng)字符串中含有空格時(shí),應(yīng)該用雙引
17、號(hào)(“)括起來(lái))括起來(lái)。這樣做的目的是為了讓。這樣做的目的是為了讓shell將其作為一個(gè)整體來(lái)解釋該將其作為一個(gè)整體來(lái)解釋該字符串。字符串。 雙引號(hào)還會(huì)按照要求來(lái)解析字符串內(nèi)的所有變量。下雙引號(hào)還會(huì)按照要求來(lái)解析字符串內(nèi)的所有變量。下面是兩個(gè)不同的示例過(guò)程:面是兩個(gè)不同的示例過(guò)程:(1)pdksh和和bash環(huán)境下的編寫(xiě)過(guò)程。環(huán)境下的編寫(xiě)過(guò)程。string=hello wordnewstring=The value of string is $stringecho $newstring(2)tcsh環(huán)境下的編寫(xiě)過(guò)程。環(huán)境下的編寫(xiě)過(guò)程。set string=hello wordset newst
18、ring=The value of string is $stringecho $newstring(3)兩個(gè)例子的結(jié)果都為如下輸出。)兩個(gè)例子的結(jié)果都為如下輸出。The value of string is hello word11.5.2 單引號(hào)單引號(hào) 用單引號(hào)(用單引號(hào)()將字符串括起來(lái)的目的是阻止)將字符串括起來(lái)的目的是阻止shlle對(duì)該對(duì)該字符串中的變量進(jìn)行解析。下面將上節(jié)例子中的雙引號(hào)改為字符串中的變量進(jìn)行解析。下面將上節(jié)例子中的雙引號(hào)改為單引號(hào)為例來(lái)對(duì)比說(shuō)明以使讀者加深理解。單引號(hào)為例來(lái)對(duì)比說(shuō)明以使讀者加深理解。(1)pdksh和和bash環(huán)境中。環(huán)境中。string=hello
19、 wordnewstring=The value of string is $stringecho $newstring(2)tcsh環(huán)境中。環(huán)境中。set string=hello wordset newstring=The value of string is $stringecho $newstring(3)兩個(gè)例子的結(jié)果都為如下輸出。)兩個(gè)例子的結(jié)果都為如下輸出。The value of string is $string通過(guò)上述例子可發(fā)現(xiàn)變量通過(guò)上述例子可發(fā)現(xiàn)變量string沒(méi)有被沒(méi)有被shell解析。解析。11.5.3 反斜杠在特殊字符前加上反斜杠(在特殊字符前加上反斜杠()可以阻
20、止)可以阻止shell將該字符將該字符解釋為特殊字符。例如,要將解釋為特殊字符。例如,要將$hello值賦給名為值賦給名為str的變量。的變量。如果直接賦值的話,如果直接賦值的話,shell將會(huì)把將會(huì)把“$hello”解析為變量解析為變量hello的值。那么如果程序中沒(méi)有定義名為的值。那么如果程序中沒(méi)有定義名為hello變量的話,存放變量的話,存放在變量在變量str中的值將是一個(gè)空值。而并不能達(dá)到預(yù)期的賦值中的值將是一個(gè)空值。而并不能達(dá)到預(yù)期的賦值目的。目的。 11.5.4 反引號(hào)反引號(hào)(反引號(hào)()用來(lái)通知)用來(lái)通知shell執(zhí)行由反引號(hào)所定義的字符執(zhí)行由反引號(hào)所定義的字符串。在串。在shel
21、l程序中,其可以將括起來(lái)的命令執(zhí)行后的結(jié)果程序中,其可以將括起來(lái)的命令執(zhí)行后的結(jié)果存放在定義的變量中。例如,當(dāng)前目錄下有個(gè)名為存放在定義的變量中。例如,當(dāng)前目錄下有個(gè)名為text.txt的文本文件,要對(duì)其中的字?jǐn)?shù)進(jìn)行統(tǒng)計(jì)并將結(jié)果存放在變量的文本文件,要對(duì)其中的字?jǐn)?shù)進(jìn)行統(tǒng)計(jì)并將結(jié)果存放在變量num中。編寫(xiě)如下內(nèi)容:中。編寫(xiě)如下內(nèi)容:#count how many chars in the text.txtnum=wc -w text.txtecho “There are $num chars in the text.txt.”11.6 表達(dá)式的比較執(zhí)行兩種操作符(數(shù)字或字符串)的邏輯比較是稍有執(zhí)
22、行兩種操作符(數(shù)字或字符串)的邏輯比較是稍有不同的,這取決于處在哪個(gè)不同的,這取決于處在哪個(gè)shell中。在中。在pdksh和和bash中,中,有一個(gè)叫做有一個(gè)叫做test的命令可以用來(lái)完成表達(dá)式的比較。在的命令可以用來(lái)完成表達(dá)式的比較。在tcsh中,可以編寫(xiě)一個(gè)表達(dá)式來(lái)完成同樣的比較。中,可以編寫(xiě)一個(gè)表達(dá)式來(lái)完成同樣的比較。pdksh和和bash環(huán)境下對(duì)環(huán)境下對(duì)test命令的處理是相同的。下命令的處理是相同的。下面來(lái)介紹一下面來(lái)介紹一下test命令支持的比較類(lèi)型:命令支持的比較類(lèi)型:(1)字符串比較,主要用來(lái)比較兩個(gè)字符串的表達(dá)式)字符串比較,主要用來(lái)比較兩個(gè)字符串的表達(dá)式的操作符。的操作符
23、。=:比較兩個(gè)字符串是否相等。:比較兩個(gè)字符串是否相等。!=:比較兩個(gè)字符串是否不相等。:比較兩個(gè)字符串是否不相等。-n:判定字符串的長(zhǎng)度是否大于零。:判定字符串的長(zhǎng)度是否大于零。-z:判定字符串長(zhǎng)度是否等于零。:判定字符串長(zhǎng)度是否等于零。 (2)數(shù)字比較,下面這些操作符可用于對(duì)兩個(gè)數(shù)字間)數(shù)字比較,下面這些操作符可用于對(duì)兩個(gè)數(shù)字間的比較。的比較。-eq:比較兩個(gè)數(shù)是否相等。:比較兩個(gè)數(shù)是否相等。-ge:比較一個(gè)數(shù)是否大于或等于另一個(gè)數(shù)。:比較一個(gè)數(shù)是否大于或等于另一個(gè)數(shù)。-le:也比較一個(gè)數(shù)是否小于或等于另一個(gè)數(shù)。:也比較一個(gè)數(shù)是否小于或等于另一個(gè)數(shù)。-ne:比較兩個(gè)數(shù)是否不等。:比較兩個(gè)數(shù)
24、是否不等。-gt:比較一個(gè)數(shù)是否大于另一個(gè)數(shù)。:比較一個(gè)數(shù)是否大于另一個(gè)數(shù)。-lt:比較一個(gè)數(shù)是否小于另一個(gè)數(shù)。:比較一個(gè)數(shù)是否小于另一個(gè)數(shù)。(3)文件操作符,下面這些操作符可用于文件的比較)文件操作符,下面這些操作符可用于文件的比較。-d:確定文件是否為目錄。:確定文件是否為目錄。-f:確定文件是否為普通文件。:確定文件是否為普通文件。-r:確定對(duì)文件是否設(shè)置讀許可。:確定對(duì)文件是否設(shè)置讀許可。-s:確定文件名是否具有大于零的長(zhǎng)度。:確定文件名是否具有大于零的長(zhǎng)度。-w:確定對(duì)文件是否設(shè)置寫(xiě)許可。:確定對(duì)文件是否設(shè)置寫(xiě)許可。-x:確定對(duì)文件是否設(shè)置執(zhí)行許可。:確定對(duì)文件是否設(shè)置執(zhí)行許可。11
25、.7 循環(huán)語(yǔ)句循環(huán)語(yǔ)句是用來(lái)對(duì)循環(huán)語(yǔ)句內(nèi)包含的一系列命令重復(fù)循環(huán)語(yǔ)句是用來(lái)對(duì)循環(huán)語(yǔ)句內(nèi)包含的一系列命令重復(fù)執(zhí)行多次。通常應(yīng)用于比較復(fù)雜的計(jì)算之中,往往通過(guò)循環(huán)執(zhí)行多次。通常應(yīng)用于比較復(fù)雜的計(jì)算之中,往往通過(guò)循環(huán)語(yǔ)句把一個(gè)復(fù)雜化的問(wèn)題變得簡(jiǎn)單易操作。因此其是一個(gè)用語(yǔ)句把一個(gè)復(fù)雜化的問(wèn)題變得簡(jiǎn)單易操作。因此其是一個(gè)用于提高效率的語(yǔ)句。在本章將對(duì)其主要類(lèi)型進(jìn)行介紹。于提高效率的語(yǔ)句。在本章將對(duì)其主要類(lèi)型進(jìn)行介紹。11.7.1 for語(yǔ)句(1)for語(yǔ)句實(shí)現(xiàn)循環(huán)的一種格式。語(yǔ)句實(shí)現(xiàn)循環(huán)的一種格式。for (expression1;expression2;expression3)dostatements
26、Done(2)for語(yǔ)句實(shí)現(xiàn)循環(huán)的另一種格式:語(yǔ)句實(shí)現(xiàn)循環(huán)的另一種格式:for indostatementsdone11.7.2 while循環(huán)語(yǔ)句當(dāng)指定的條件為真時(shí),當(dāng)指定的條件為真時(shí),while語(yǔ)句會(huì)循環(huán)執(zhí)行循環(huán)體內(nèi)語(yǔ)句會(huì)循環(huán)執(zhí)行循環(huán)體內(nèi)的命令。一旦所指定的條件為假時(shí),則立即終止循環(huán)。如果的命令。一旦所指定的條件為假時(shí),則立即終止循環(huán)。如果所指定的條件一開(kāi)始就被判定為假,則一次都不執(zhí)行循環(huán)。所指定的條件一開(kāi)始就被判定為假,則一次都不執(zhí)行循環(huán)。在使用在使用while語(yǔ)句時(shí),若所指定的條件永不為假,則循環(huán)就語(yǔ)句時(shí),若所指定的條件永不為假,則循環(huán)就永不終止。讀者在編寫(xiě)永不終止。讀者在編寫(xiě)shel
27、l程序時(shí)應(yīng)注意這個(gè)問(wèn)題,避免程序時(shí)應(yīng)注意這個(gè)問(wèn)題,避免產(chǎn)生死循環(huán)現(xiàn)象。產(chǎn)生死循環(huán)現(xiàn)象。(1)while語(yǔ)句在語(yǔ)句在pdksh和和bash環(huán)境中使用格式。環(huán)境中使用格式。while do statementsdone11.7.3 until語(yǔ)句until語(yǔ)句會(huì)根據(jù)指定的條件循環(huán)執(zhí)行循環(huán)體中的命令語(yǔ)句會(huì)根據(jù)指定的條件循環(huán)執(zhí)行循環(huán)體中的命令,直到所指定的條件判定為真則終止循環(huán)。,直到所指定的條件判定為真則終止循環(huán)。until語(yǔ)句在語(yǔ)句在pdksh和和bash環(huán)境中的格式如下:環(huán)境中的格式如下:until dostatementsdoneuntil語(yǔ)句類(lèi)似于語(yǔ)句類(lèi)似于while語(yǔ)句。只是其為當(dāng)判定條件
28、為真語(yǔ)句。只是其為當(dāng)判定條件為真時(shí),才終止循環(huán)。讀者可參照時(shí),才終止循環(huán)。讀者可參照while語(yǔ)句的用法,這里就不語(yǔ)句的用法,這里就不做過(guò)多的介紹。做過(guò)多的介紹。11.7.4 repeat語(yǔ)句repeat語(yǔ)句用于重復(fù)執(zhí)行規(guī)定次命令。例如,要連續(xù)語(yǔ)句用于重復(fù)執(zhí)行規(guī)定次命令。例如,要連續(xù)顯示數(shù)字顯示數(shù)字“repeat”8次可以執(zhí)行如下:次可以執(zhí)行如下:repeat 8 echo repeat11.7.5 select語(yǔ)句 當(dāng)編寫(xiě)一個(gè)需要聯(lián)機(jī)輸入的當(dāng)編寫(xiě)一個(gè)需要聯(lián)機(jī)輸入的shell程序時(shí),程序時(shí),select語(yǔ)句語(yǔ)句就可用來(lái)生成一個(gè)菜單列表。其格式如下:就可用來(lái)生成一個(gè)菜單列表。其格式如下:sele
29、ct in dostatementsdone其中其中itemlist為可選。當(dāng)編寫(xiě)者未給出為可選。當(dāng)編寫(xiě)者未給出itemlist時(shí),系時(shí),系統(tǒng)將通過(guò)統(tǒng)將通過(guò)item中的項(xiàng)每次重復(fù)一個(gè)。當(dāng)給出中的項(xiàng)每次重復(fù)一個(gè)。當(dāng)給出temlist時(shí),系時(shí),系統(tǒng)會(huì)將統(tǒng)會(huì)將itemlist列表中的當(dāng)前值賦給列表中的當(dāng)前值賦給item,這樣,這樣item就可用就可用作為所執(zhí)行語(yǔ)句的一部分。作為所執(zhí)行語(yǔ)句的一部分。11.7.6 shift語(yǔ)句shift語(yǔ)句用來(lái)處理位置參數(shù)并從左到右依次處理一個(gè)語(yǔ)句用來(lái)處理位置參數(shù)并從左到右依次處理一個(gè)參數(shù)。位置參數(shù)是用參數(shù)。位置參數(shù)是用$1、$2、$3等來(lái)標(biāo)識(shí)的。等來(lái)標(biāo)識(shí)的。shif
30、t命令的命令的作用就是將每個(gè)位置參數(shù)向左移動(dòng)一個(gè)位置使當(dāng)前的參數(shù)丟作用就是將每個(gè)位置參數(shù)向左移動(dòng)一個(gè)位置使當(dāng)前的參數(shù)丟失。失。Shift語(yǔ)句的格式如下:語(yǔ)句的格式如下:shift num參數(shù)參數(shù)num是可選的,用于指定移動(dòng)的次數(shù)。其缺省值是可選的,用于指定移動(dòng)的次數(shù)。其缺省值為為1,即參數(shù)向左移動(dòng)一個(gè)位置。若指定了這個(gè)參數(shù)則系統(tǒng),即參數(shù)向左移動(dòng)一個(gè)位置。若指定了這個(gè)參數(shù)則系統(tǒng)將使位置參數(shù)向左移動(dòng)將使位置參數(shù)向左移動(dòng)num個(gè)位子。在個(gè)位子。在shell程序中,程序中,shift命令用于使用戶能夠在程序中傳送不同的選項(xiàng)。命令用于使用戶能夠在程序中傳送不同的選項(xiàng)。11.8 條件語(yǔ)句shell程序中所
31、利用的條件語(yǔ)句是根據(jù)所指定的條件來(lái)程序中所利用的條件語(yǔ)句是根據(jù)所指定的條件來(lái)確定執(zhí)行程序的哪個(gè)部分。通俗的說(shuō)就是當(dāng)處理一件事情時(shí)確定執(zhí)行程序的哪個(gè)部分。通俗的說(shuō)就是當(dāng)處理一件事情時(shí),有多種可處理的方法,但是只能從可選擇處理方法中選取,有多種可處理的方法,但是只能從可選擇處理方法中選取一種作為最佳的方案。一種作為最佳的方案。11.8.1 if語(yǔ)句if語(yǔ)句根據(jù)判定邏輯表達(dá)式來(lái)作出選擇。其語(yǔ)法與語(yǔ)句根據(jù)判定邏輯表達(dá)式來(lái)作出選擇。其語(yǔ)法與C語(yǔ)言中語(yǔ)言中的,的,if語(yǔ)句用法基本相同。在語(yǔ)句用法基本相同。在pdksh和和bash環(huán)境中,此語(yǔ)句最基環(huán)境中,此語(yǔ)句最基本的格式如下:本的格式如下:if then
32、 statements1else statements2fi上述表達(dá)式中,參數(shù)概念如下:上述表達(dá)式中,參數(shù)概念如下:為一個(gè)條件表達(dá)式,是一個(gè)邏輯值。為一個(gè)條件表達(dá)式,是一個(gè)邏輯值。Statements1、statements2都為執(zhí)行語(yǔ)句部分,由若干個(gè)都為執(zhí)行語(yǔ)句部分,由若干個(gè)命令組成。命令組成。當(dāng)當(dāng)判定為真時(shí),則執(zhí)行判定為真時(shí),則執(zhí)行statements1,然后結(jié),然后結(jié)束束if語(yǔ)句并繼續(xù)執(zhí)行語(yǔ)句并繼續(xù)執(zhí)行if后面的語(yǔ)句。后面的語(yǔ)句。當(dāng)當(dāng)判定為假時(shí),則執(zhí)行判定為假時(shí),則執(zhí)行statements1,然后結(jié),然后結(jié)束束if語(yǔ)句并繼續(xù)執(zhí)行語(yǔ)句并繼續(xù)執(zhí)行if后面的語(yǔ)句。后面的語(yǔ)句。11.8.2 ca
33、se語(yǔ)句當(dāng)當(dāng)if語(yǔ)句的出口分支比較多的時(shí)候,程序的可讀性就會(huì)大大語(yǔ)句的出口分支比較多的時(shí)候,程序的可讀性就會(huì)大大下降。為了提高可讀性,就可以使用下降。為了提高可讀性,就可以使用case語(yǔ)句來(lái)實(shí)現(xiàn)。語(yǔ)句來(lái)實(shí)現(xiàn)。(1)pdksh和和bash環(huán)境下,環(huán)境下,case語(yǔ)句格式。語(yǔ)句格式。case instring1) statements1;string2) statements2;*)statements;Esac11.9 跳轉(zhuǎn)語(yǔ)句通過(guò)前面的學(xué)習(xí),大家應(yīng)該知道了通過(guò)前面的學(xué)習(xí),大家應(yīng)該知道了shell的基本編寫(xiě)方的基本編寫(xiě)方法。順序,選擇,循還的使用,在此還有另外的兩個(gè)特殊語(yǔ)法。順序,選擇,循還的使
34、用,在此還有另外的兩個(gè)特殊語(yǔ)句要講:句要講:break語(yǔ)句。語(yǔ)句。break語(yǔ)句可以用來(lái)終止重復(fù)執(zhí)行的循環(huán)。這種循環(huán)可語(yǔ)句可以用來(lái)終止重復(fù)執(zhí)行的循環(huán)。這種循環(huán)可以是以是for、until或或repeat命令。命令。 exit語(yǔ)句。語(yǔ)句。exit語(yǔ)句可以用來(lái)在執(zhí)行語(yǔ)句可以用來(lái)在執(zhí)行shell程序時(shí)退出程序。在程序時(shí)退出程序。在exit之后可有選擇地利用一個(gè)數(shù)字。其放置的位置和之后可有選擇地利用一個(gè)數(shù)字。其放置的位置和break相似相似,這里就不做過(guò)多的介紹。如果當(dāng)前的,這里就不做過(guò)多的介紹。如果當(dāng)前的shell程序被另一個(gè)程序被另一個(gè)shell程序調(diào)用,那么這個(gè)調(diào)用程序?qū)z查代碼并作出相應(yīng)程序調(diào)
35、用,那么這個(gè)調(diào)用程序?qū)z查代碼并作出相應(yīng)的判定。的判定。11.10 函數(shù)和其他編程語(yǔ)言一樣,和其他編程語(yǔ)言一樣,shell程序也支持函數(shù)。函數(shù)是程序也支持函數(shù)。函數(shù)是shell程序中執(zhí)行特殊過(guò)程的部件,并在程序中執(zhí)行特殊過(guò)程的部件,并在shell程序中可以被程序中可以被重復(fù)調(diào)用。編寫(xiě)函數(shù)將有助于使重復(fù)調(diào)用。編寫(xiě)函數(shù)將有助于使shell程序更加簡(jiǎn)潔易懂。程序更加簡(jiǎn)潔易懂。(1)pdksh和和bash環(huán)境中函數(shù)格式定義。環(huán)境中函數(shù)格式定義。func()statements(2)調(diào)用函數(shù)的格式。)調(diào)用函數(shù)的格式。func param1 param2 param3說(shuō)明:參數(shù)說(shuō)明:參數(shù)param1、param2等為可選。還能把參數(shù)等為可選。還能把參數(shù)作為單字符串來(lái)傳送,例如作為單字符串來(lái)傳送,例如$。函數(shù)可解析參數(shù),就如同。函數(shù)可解析參數(shù),就如同其傳送給其傳送給shell程序的位置參數(shù)一樣。程序的位置參數(shù)一樣。11.11 小 結(jié)在本章中,學(xué)習(xí)了如何編寫(xiě)在本章中,學(xué)習(xí)了如何編寫(xiě)shell程序,程序,shell程序可以用來(lái)編寫(xiě)執(zhí)行簡(jiǎn)單任務(wù)的程序可以用來(lái)編寫(xiě)執(zhí)行簡(jiǎn)單任務(wù)的程序。例如進(jìn)入系統(tǒng)時(shí)設(shè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年二手車(chē)評(píng)估師考試準(zhǔn)備資料與答案
- 2024年小自考公共事業(yè)管理應(yīng)試技巧及答案
- 2024年古代文學(xué)史論點(diǎn)探討試題及答案
- 無(wú)領(lǐng)導(dǎo)討論組試題及答案
- 2024年新興汽車(chē)產(chǎn)業(yè)對(duì)維修工的影響試題及答案
- 2024年汽車(chē)維修工考試應(yīng)試策略試題及答案
- 透視古代文學(xué)史考試重要性試題及答案
- 2024年省考二手車(chē)售前檢查標(biāo)準(zhǔn)試題及答案
- 小學(xué)語(yǔ)文一年級(jí)考試的練習(xí)試題及答案
- 2024年汽車(chē)維修工考試實(shí)戰(zhàn)演練指導(dǎo)試題及答案
- 2025年陜西農(nóng)業(yè)發(fā)展集團(tuán)有限公司(陜西省土地工程建設(shè)集團(tuán))招聘(200人)筆試參考題庫(kù)附帶答案詳解
- 5.3基本經(jīng)濟(jì)制度 課件 2024-2025學(xué)年統(tǒng)編版道德與法治八年級(jí)下冊(cè)
- Unit4 Breaking Boundaries 單元教學(xué)設(shè)計(jì)-2024-2025學(xué)年高中英語(yǔ)外研版(2019)選擇性必修第二冊(cè)
- T-CCTAS 61-2023 橋梁承重纜索抗火密封綜合防護(hù)技術(shù)規(guī)程
- 2025慢性阻塞性肺?。℅OLD)指南更新要點(diǎn)解讀課件
- 2024年05月湖北中國(guó)郵政儲(chǔ)蓄銀行湖北省分行春季校園招考筆試歷年參考題庫(kù)附帶答案詳解
- 鐵路行車(chē)組織 課件 項(xiàng)目4 調(diào)車(chē)工作
- 《墻面原位加固修復(fù)技術(shù)規(guī)程》
- 2024年中國(guó)養(yǎng)老產(chǎn)業(yè)商學(xué)研究報(bào)告-銀發(fā)經(jīng)濟(jì)專題
- 《軟件工程經(jīng)濟(jì)學(xué)》課件-第3章
- 2024游樂(lè)新“室”界室內(nèi)樂(lè)園洞察與趨勢(shì)研究報(bào)告
評(píng)論
0/150
提交評(píng)論