Bash技巧:詳解 while 和 until 循環命令的用法

在 Linux 的 Bash shell 中,while 複合命令 (compound command) 和 until 複合命令均可以用於循環執行指定的語句,直到遇到 false 爲止。查看 man bash 裏面對 while 和 until 的說明以下:shell

while list-1; do list-2; done
until list-1; do list-2; done
The while command continuously executes the list list-2 as long as the last command in the list list-1 returns an exit status of zero.
The until command is identical to the while command, except that the test is negated; list-2 is executed as long as the last command in list-1 returns a non-zero exit status.
The exit status of the while and until commands is the exit status of the last command executed in list-2, or zero if none was executed.;

能夠看到,while 命令先判斷 list-1 語句的最後一個命令是否返回爲 0,若是爲 0,則執行 list-2 語句;若是不爲 0,就不會執行 list-2 語句,並退出整個循環。即,while 命令是判斷爲 0 時執行裏面的語句。編程

while 命令的執行條件相反,until 命令是判斷不爲 0 時才執行裏面的語句。bash

注意:這裏有一個比較反常的關鍵點,bash 是以 0 做爲 true,以 1 做爲 false,而大部分編程語言是以 1 做爲 true,0 做爲 false,要注意區分,避免搞錯判斷條件的執行關係。less

在 bash 中,使用 test 命令、[ 命令來做爲判斷條件,可是 while 命令並不限於使用這兩個命令來進行判斷,實際上,在 while 命令後面能夠跟着任意命令,它是基於命令的返回值來進行判斷,分別舉例以下。編程語言

下面的 while 循環相似於C語言的 while (--count >= 0) 語句,使用 [ 命令來判斷 count 變量值是否大於 0,若是大於 0,則執行 while 循環裏面的語句:ide

count=3
while [ $((--count)) -ge 0 ]; do 
    # do some thing
done

下面的 while 循環使用 read 命令讀取 filename 文件的內容,直到讀完爲止,read 命令在讀取到 EOF 時,會返回一個非 0 值,從而退出 while 循環:oop

while read fileline; do
    # do some thing
done < filename

下面的 while 循環使用 getopts 命令處理全部的選項參數,一直處理完、或者報錯爲止:code

while getopts "rich" arg; do
    # do some thing with $arg
done

若是要提早跳出循環,能夠使用 break 命令。查看 man bash 對 break 命令說明以下:ci

break [n]
Exit from within a for, while, until, or select loop. If n is specified, break n levels. n must be ≥ 1.
If n is greater than the number of enclosing loops, all enclosing loops are exited.
The return value is 0 unless n is not greater than or equal to 1.

即,break 命令能夠跳出 for 循環、while 循環、until 循環、和 select 循環。get

相關文章
相關標籤/搜索