12.1-結構化指令if-then
許多程式要求對shell腳本中的指令施加一些邏輯流程控制。有一類指令會根據條件使腳本跳過某些指令。這樣的指令通常稱為結構化指令(structured command)。
1. 基本的結構化if-then語句
結構化指令允許你改變程式執行的順序。在bash shell中有不少結構化指令,基本的結構化指令就是if-then語句,if-then語句可以有兩種格式
第一種:
1 if command
2 then
3 commands
4
第二種:
1 if command;then
2 commands
3
- bash shell的if語句會運作if後面的那個指令。
-
如果該指令的退出狀态碼是0 (該指令成功運作),位于then部分的指令就會被執行。
如果該指令的退出狀态碼是其他值,then部分的指令就不會被執行,bash shell會繼續執行腳本中的下一個指令。
-
then的部分可以不止一條指令,會将這些指令當成一個塊
如果該指令的退出狀态碼是0 (該指令成功運作),位于then部分的所有指令就會被執行。
如果該指令的退出狀态碼是其他值,then部分的所有指令就不會被執行,bash shell會繼續執行腳本中的下一個指令。
- fi語句用來表示if-then 語句到此結束。
舉例1

舉例2
舉例3
舉例4
if語句行使用grep指令在/etc/passwd檔案中查找某個使用者名目前是否在系統上使用。如果有使用者使用了那個登入名,腳本會顯示一些文本資訊并列出該使用者HOME目錄的bash檔案。
但是,如果将testuser變量設定成一個系統上不存在的使用者,則什麼都不會顯示。
2. if-then-else語句
1 if command
2 then
3 command
4 else
5 command
6
- 當if語句中的指令傳回零退出狀态碼時,會執行then部分中的指令
- 當if語句中的指令傳回非零退出狀态碼時,會執行else部分中的指令
- else部分可以包含多條指令
舉例1
3. 嵌套 if
- bash shell會依次執行if語句,隻有第一個傳回退出狀态碼0的語句中的then部分會被執行
- elif語句中,緊跟其後的else語句屬于elif代碼塊的
1 if command
2 then
3 command
4 elif command
5 then
6 command
7 elif command
8 then
9 command
10 else
11 command
12