1. 程式人生 > >自學Linux Shell12.1-結構化命令if-then

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

之路 get 嵌套 structure 就會 退出 alt linu 退出狀態

點擊返回 自學Linux命令行與Shell腳本之路

12.1-結構化命令if-then

許多程序要求對shell腳本中的命令施加一些邏輯流程控制。有一類命令會根據條件使腳本跳過某些命令。這樣的命令通常稱為結構化命令(structured command)。

1. 基本的結構化if-then語句

結構化命令允許你改變程序執行的順序。在bash shell中有不少結構化命令,基本的結構化命令就是if-then語句,if-then語句可以有兩種格式

第一種:

1 if    command
2 then
3       commands
4 fi

第二種:

1 if  command;then
2 commands 3 fi
  • 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 fi
  • 當if語句中的命令返回零退出狀態碼時,會執行then部分中的命令
  • 當if語句中的命令返回非零退出狀態碼時,會執行else部分中的命令
  • else部分可以包含多條命令

舉例1

技術分享圖片

舉例2
技術分享圖片

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 fi

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