天天看點

自學Linux Shell12.1-結構化指令if-then

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

自學Linux Shell12.1-結構化指令if-then

舉例2

自學Linux Shell12.1-結構化指令if-then

舉例3

自學Linux Shell12.1-結構化指令if-then

 舉例4

自學Linux Shell12.1-結構化指令if-then

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