2016年Linux認證考試要點:shell程序控制結構語句

shell程序控制結構語句

2016年Linux認證考試要點:shell程序控制結構語句

腳本的控制結構語句有三種基本的類型:兩路分支、多路分支以及一個或多個命令的循環執行。Linux的bash中的兩路分支語句是if語句,多路分支語句是if-elif和case語句;代碼的循環執行語句是for、while和until語句。

if語句

兩路分支的'if語句 格式

if 判斷條件

then 命令1

else 命令2

  Fi

判斷條件包括命令語句和測試語句兩種方式:

命令語句形式的判斷條件

多路條件判斷分支的if語句

格式爲:

if 判斷條件1

then 命令1

elif 判斷條件2

then 命令2

……

else 命令n

Fi

其中elif是else if的縮寫

測試語句

有兩種格式,一種是使用關鍵字test,而另一種是使用方括號。格式如下:

test expression

[ expression ]

二者是等效的。同時要注意幾點

用於三種形式的測試:文件測試、字符串測試和數值測試

文件測試

字符串測試

數值測試

用邏輯操作符進行組合的測試語句

用邏輯操作符進行組合的測試語句實例

[ ! "$s1" -le 0 ]

! test "$s1" -le 0

[ -f "$s1" –a –w "$s1" ]

test –f "$s1" -a –w "$s1"

[ "$s1" –gt 0 –o "$s2" –lt 10 ]

test "$s1" –gt 0 –o "$s2" –lt 10

[ ( "$a" –gt 0 –a "$a" –lt 10 ) –a "$a" –ne 5 ]

test ( "$a" –gt 0 –a "$a" –lt 10 ) –a "$a" –ne 5

case語句

對同一變量進行多次的測試,比elif語句更簡單、簡潔

case string1 in

str1)

commands-list1;;

str2)

commands-list2;;

...

strn)

commands-listn;;

esac

使用case語句時應注意以下幾點

(1) 每個正則表達式後面可有一條或多條命令,其最後一條命令必須以兩個分號(;;)結束。

(2) 正則表達式中可以使用通配符。

(3) 如果一個正則表達式是由多個模式組成,那麼各模式之間應以豎線“|”隔開。表示各模式是“或”關係,即只要給定字符串與其中一個模式相配,就會執行其後的命令表。

使用case語句時應注意以下幾點

(4) 各正則表達式是唯一的,不應重複出現。

(5) case語句以關鍵字case開頭,以關鍵字esac結束。

(6) case的退出(返回)值是整個結構中最後執行的那個命令的退出值。若沒有執行任何命令,則退出值爲零。

for語句

格式:

for variable [in argument-list]

do

command-list

Done

其中的[in argument-list]部分爲可選項,由於它的不同又可有三種形式。

[in argument-list]部分三種形式

[argument-list]爲變量值表

變量variable依次取值表中各字符串

[argument-list]爲文件的表達式

變量的值依次取當前目錄(或指定目錄)下與文件表達式相匹配的文件名,每取值一次,就進入循環體執行命令表,直到所有匹配的文件名取完爲止。

[argument-list]爲空

[argument-list]也可以用$*來代替,變量依次取位置參數的值,然後執行循環體中的命令表,直至所有位置參數取完爲止。

while語句

格式爲:

while expression

do

command-list

Done

作用:只要expression的值爲真,則進入循環體,執行command-1ist中的命令,然後再做條件測試,直到測試條件爲假時才終止while語句的行。

until語句

格式爲:

until expression

do

command-list

done

作用: 只要expression的值爲假,就執行command—lists的命令。

break和continue語句

break命令可以從循環體中退出來。格式爲:

break [n]

continue命令跳過循環體中在它之後的語句,回到本層循環的開頭,進行下一次循環。格式爲:

continue [n]

算術表達式

五種基本的算術運算:+(加)、-(減)、*(乘)、/(除)和%(取模)。shell只提供整數的運算。格式如下:

expr n1運算符n2

例:

[expr 15 * 15

注意:在運算符的前後都留有空格,否則expr不對錶達式進行計算,而直接輸出它們。

自定義函數

在shell腳本中可以定義並使用函數。其定義格式爲:

Function( )

{

command-list

}

函數應先定義,後使用。調用函數時,直接利用函數名調用。