一. while 循環
while 命令格式
while 條件表
do
命令表
done
執行過程
Shell首先執行條件表,如果條件表的最后一條語句的退出狀態為零,則執行盾環體內的命令表,執行完后,再檢查條件表,如果退出狀態為零將繼續執行,如此循環往復直到條件表的最后一條語句的退出狀態非零. 退出狀態為零就是條件為真True.
舉例說明 假如shell文件的內容如下:
Sum=0
i=0
while true #true是系統的關鍵詞 表示真
do
i=`expr $i + 1`
Sum=`expr $Sum + $i`
if [ $i = "100" ]
then
break;
fi
done
echo $i $Sum
最后這個程序顯示的是 100 5050
這個程序的運算就是將1到100加起來
下面將這個程序再改動一下
Sum=0
i=0
while [ $i != "100" ]
do
i=`expr $i + 1`
Sum=`expr $Sum + $i`
done
echo $i $Sum
改動后的程序運算結果和上面是一樣 但程序比上面的要簡練
在這個循環中還可以以until做為測試條件 它正好與while測試的條件相反,也就是當條件為假時將繼續執行循環體內的語句,否則就退出循環體,下面還用這個例子.
Sum=0
i=0
until [ $i = "100" ]
do
i=`expr $i + 1`
Sum=`expr $Sum + $i`
done
echo $i $Sum
當i不等于100時循環 就是當條件為假時循環,否則就退出,而第一個例子是當i不等于100
時循環,也就是測試條件為真時循環.
二.for 循環
命令格式:
for 變量 in 名字列表
do
命令列表
done
這里的名字列表是一個由空格分隔的字符串列表,shell在執行for循環時每次依次從名字表中取出一個字符串賦給循環變量作為變量的值.
在寫for語句時,也可以省略in 名字列表部分,這表示用當前的位置參數來代替這時的名字列表.
面舉個例子,比如在你的電腦中有兩個目錄,一個是aa,一個是bb在這兩個目錄中有5個相同的文件,但其中一個目錄中的一個或多個文件剛剛修改過,現在我忘記剛才改的是那幾個文件 了,那么我靠已知的序碼查找。
程序如下:
for File in a1 a2 a3 a4 a5
do
diff aa/$File bb/$File
done
下面再舉一個不帶名字列表的例子
for File
do
echo $Filw
done
文件內容保存在a.sh中 并可執行
我們在執行這個shell程序時命令行如下:
a.sh a1 a2 a3 a4 a5
執行結果如下:
a1
a2
a3
a4
a5
大家從這個例子中可以看到命令行的參數被逐一讀入一次
三.循環控制語句
break 命令不執行當前循環體內break下面的語句從當前循環退出.
continue 命令是程序在本循體內忽略下面的語句,從循環頭開始執行.