流程式控制制
Bash Shell中,流程式控制制命令有兩大類:選擇和迴圈。屬於選擇的有:if,case;屬於迴圈的有:for,while,until;命令select既屬於選擇,也屬於迴圈。不管是哪一種,均需進行條件測試,再根據測試結果,決定程式流程進行的方向。
Bash Shell Script可由許多命令組成,每一個命令執行後,都會傳回一個結束狀態值,成功返回0否則非0.Bash內建變數$?用來儲存每個命令執行後傳回的狀態值。
if條件判斷
完整的文法結構是
if 條件測試1; then
命令地區1
elif 條件測試2; then
命令地區2
else
命令地區3
fi
其中elif可以多行數量不限,else只能有一行,也可以沒有
條件測試可以有多種形式,測試結果是真是假,就看其傳回的值是否為0.條件測試的寫法有10種
1 執行某一個命令的結果:可以包含管道命令,其結果狀態為最後一個命令執行的結果
2 傳回某一命令執行結果的相反值:!命令
3 使用複合命令:((算式)) 運算結果為0返回假,不為0返回真
4 使用Bash關鍵詞'[['、']]'組成的式子:[[判斷式]] 傳回0為真,非0為假
5 使用內建命令:test 判斷式 真值傳回0,假值傳回1 轉義
6 使用內建命令:[判斷式] 與test相同
7 使用-a、-o進行邏輯組合 a且o或
8 命令1&&命令2
9 命令1||命令2
10 &&和||複用
關於檔案屬性的判斷式
關於字串的條件判斷式
關於算式的條件判斷式
Case
case 待測項 in
樣式串列1) 命令地區1;;
樣式串列2) 命令地區2;;
樣式串列3) 命令地區3;;
...
*) 命令地區;;
esac
樣式串中有好幾個字串時,要用|隔開
樣式串列可寫成'(樣式串列)',或者'樣式串列)',後者更常見。
For
for 變數 in 串列
do
命令地區
done
串列是一些字串的組合,彼此用$IFS所定義的分割字元(如空格符)隔開,這些字串稱為欄位。
in 串列
可以不寫,等同於
for 變數 in $@
do
命令地區
done
$@代表命令列所有參數
另一種for格式
for ((初始條件; 終止條件; 異動項))
do
命令地區
done
While
while 條件測試
do
命令地區
done
Until
until 條件測試
do
命令地區
done
Select命令
select 選項變數 in 串列
do
命令地區
done
select命令建立一個列表。列表的選項,即串列中的各個欄位。列表提示符號由Bash的內建變數PS3來定義,預設值#?。只要改變PS3的值,使用者可以自訂提示符號。select會給各個選項一個編號,從1開始遞增。當使用者鍵入編號,選擇其中某一個選項時,該選項的內容就設定給選項變數,而鍵入的編號值則放入REPLY變數中。
若要結束select列表,可在命令地區輸入break命令,或按ctrl-D結束。
break和continue