13-4 選擇性敘述
一般 Shell script 大多提供有下列選擇性敘述: Ø if/then/elif/else/fi Ø case/esac 以下分別介紹之。 13-4-1 if 選擇結構 if 程式結構為最簡單且最常用的選擇性敘述,若是『條件』(Condition)成立的話,則執行某一程式區塊(一些敘述句的組合),但它也有幾種變形,以下分別介紹之。 【A. if/then/fi 敘述】 Shell script 的程式區塊與一般程式語言之間有很大的不同。以 C 語言為例,程式區塊是利用大括號包括起來(如 {…..}),Shell script 並沒有使用到大括號的功能,然而 if 敘述是利用 then 語句表示程式區塊的開始,fi 表示程式區塊的結束。至於其他敘述(case/for/while 等等)亦大同小異,多半利用敘述句(如 case)的反向(如 esac)為程式區塊的結束。if 簡單格式如下:
上述 if 程式意思是條件成立的話,則執行 then 與 fi 所涵蓋的程式區塊。基本上,Shell script 並不理會空白格與空白行的數量,也就是說,空一格或空兩格以上是沒有差別的,空一行與空多行亦同。但某些關鍵字(如 then 或 if 等等)就必須獨立一行,如果需要與其它關鍵字結合成一行的話,必須使用分號(;)分隔。也就是說,分號(;)代表分行(或另開一行)的意思。下列是將 if 敘述重寫的格式:
更簡潔的格式如下:
【B. 範例 ex7_13】 此範例是測試某一檔案是否為一般檔案,並顯示其測試結果。($vi ex7_13)
執行結果:
【C. if/else 敘述】 if/else 敘述表示條件成立的話,執行 then 程式區塊,否則執行 else 程式區塊,格式如下:
【D. if/elif 敘述】 if/elif 敘述表示條件判斷不成立的話,再判斷其他條件(else if)是否成立,同樣的情況可以一直延伸下去,如此一來便可以整合多個條件判斷。每一次條件判斷的結果(成立或不成立),都可以建立它相對應的程式區塊,最後不管 if/elif 延伸多長,還是 fi 作為結束的語句。基本格式如下:
【E. 範例 ex7_14】 此範例一樣測試某一檔案是否為一般檔案,但此程式先檢測是否有指定被測試檔案名稱,接著再測試是否為一般檔案,程式如下:($ vi ex7_14)
13-4-2 case 選擇結構 case 敘述與 C 語言的 switch 很相似,都是依照某一變數的內容,再執行該內容的相對應程式區塊,但兩者之間還是有一些關鍵性的不同點。C 語言大多依照某一變數(或表示式)的數值當作判斷的依據,但 Shell script 的 case 不僅可依照數值之外,也可依照『圖樣』(Pattern)作為判斷依據。圖樣可利用『正規式』(,如 *、?、[] 等等,第 4-6-2 節介紹)表現形形色色的結果,它的變化性會比數值多。基本格式如下:
由上述中可以看出,由 case 到 esac 關鍵字之間為 case 的敘述區塊,其中每一 pattern 程式區塊都是利用兩個分號(;;)做結束記號,而敘述之間則是以一個分號(;)分隔。 【A. 範例 ex7_15】 此範例以數值作為選擇的依照(如同 C 語言功能),其功能是將輸入數值轉換成英文數字。程式範例如下:($ vi ex7_15)
執行結果如下:
【B. 範例 ex7_16】 範例二是以正規式作為 case 判斷的依據,在正規式中的星號(*)代表零個或一個以上的任何字元。下述範例由判斷輸入姓名(FirtName_SecondName)中,尋找符合的『姓』(SecondName),並判斷該姓名為哪一家族的成員,程式範例如下:($vi ex7_16)
我們執行該程式,以 TienShou_Nien 為引數。Case 比對 *Nien,執行結果如下:
|
翻轉工作室:粘添壽
Linux 伺服器系統管理 - CentOS:
翻轉電子書系列:
|