13-5 重複性敘述
所謂重複性程式結構大多指迴圈敘述,Shell script 的迴圈敘述有 for、while、until 與 select 等四種類型,其中 while 和 until 敘述與 C 語言比較類似,但 for 和 select 幾乎與 C 語言的 for 迴圈完全不同,以下分別介紹之。 13-5-1 for 迴圈結構 一般程式語言的 for 迴圈大多有一個計數器(counter),計算迴圈內執行的次數。然而 Shell script 的 for 迴圈則完全不同,它是依照某一序列內的元件數量,再依據每一個元件的數值執行迴圈一次,元件的數量就代表迴圈的執行次數。for 迴圈的基本結構如下:
其中,List 表示一連串的數值(或序列),變數 var 連續取代執行 List 串列中的數值(或其他格式的內容),每取代一個數值則執行迴圈一次,至於程式的實體則包含在關鍵字do 與 done之間。 【A. 範例ex7_17】 此範例是列出目前目錄底下的一般檔案名稱,程式範例如下:($vi ex7_17)
在 for var in `ls` 敘述中,ls 是利用兩個『反向單引號』(`)包起來,表示執行 ls 命令的意思;整個敘述的功能是執行 ls 命令後產生一個串列的結果,而變數 var 取用串列中元件,每取一個元件則執行 do 與 done 之間的程式區塊一次。執行結果如下:
13-5-2 select 迴圈結構 select 敘述不但具有迴圈的功能,也具有選擇性功能,運作情況與 for 迴圈有點相同。我們先觀察程式結構,再來探討其功能為何,其程式結構如下:
select 程式結構與 for 非常相似,但兩者之間的運作還是有很大的差異。相同的 List 表示一串列的元件,但 select 敘述被執行時,系統會將這一串列元件當作選項,並以環境變數 PS3 作為選項輸入的提示。當使用者在 PS3 提示下輸入某一選項時,選項的元件即被存入 var 變數內,並且執行 do 與 done 之間的程式區塊;執行完畢以後,再回到選項提示下,所以select不但具有選擇性功能,也具有迴圈性的功能。 【A. 範例 ex7_18】 本範例功能是選擇測試目錄下檔案是否為一般檔案,程式範例如下:($vi ex7_18)
程式一開始即設定環境變數 PS3(Selection =>),再利用 ls 顯示目前目錄下所有檔案。當使用者選擇一選項後,立即進入 do 與 done 之間的程式區塊,其執行結果如下:
13-5-3 while 迴圈結構 Shell script 的 while 迴圈功能幾乎與 C 語言的 while 相同,唯一差別在於條件判斷的格式。 while 敘述在條件成立時,會執行 do 與 done 之間的程式區塊,執行完後再回來測試條件判斷,如條件再成立就必須再執行程式區塊,如此反覆,直到條件不成立再跳出迴圈。基本格式如下:
【A. 範例 ex7_19】 此範例是以 1 加到 100 來驗證 Shell script 的 while 敘述功能,程式範例如下:($ vi ex7_19)
執行結果如下:
13-5-4 until 迴圈結構 until 敘述正好與 while 迴圈相反,也就是說,當條件不成立時,會執行迴圈區塊,直到條件成立才跳出迴圈。其命令格式如下:
【A. 範例 ex7_20】 此範例是當使用者輸入任何文字,程式會回應相同文字,直到出現quit 字元為止,程式如下:($vi ex7_20)
執行結果如下:
13-5-5 break 與 continue 命令 一般程式語言的 for、while 與 until 迴圈,大多會利用 break 與 continue 敘述來中斷或延續迴圈的執行。同樣的,Shell script 迴圈也擁有這兩個命令的功能,如果是巢狀迴圈的話,也可在 break 或 continue 敘述後增加一個數字引數(如 break 2 或 continue 2),指定中斷或延續第幾個迴圈。
|
翻轉工作室:粘添壽
Linux 伺服器系統管理 - CentOS:
翻轉電子書系列:
|