热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>Shell开发>

for what? while 與 until 差在哪?

来源: 作者: 时间:2008-05-16 Tag: 点击:
終於,來到 shell 十三問的最後一問了... 長長吐一口氣~~~~

最後要介紹的是 shell script 設計中常見的"循環"(loop)。
所謂的 loop 就是 script 中的一段在一定條件下反覆執行的代碼。
bash shell 中常用的 loop 有如下三種:
* for
* while
* until

for loop 是從一個清單列表中讀進變量值,並"依次"的循環執行 do 到 done 之間的命令行。
例:


[Copy to clipboard] [ - ]
CODE:
for var in one two three four five
do
echo -----------
echo '$var is '$var
echo
done

上例的執行結果將會是:

1) for 會定義一個叫 var 的變量,其值依次是 one two three four five 。
2) 因為有 5 個變量值,因此 do 與 done 之間的命令行會被循環執行 5 次。
3) 每次循環均用 echo 產生三行句子。
而第二行中不在 hard quote 之內的 $var 會依次被替換為 one two three four five 。
4) 當最後一個變量值處理完畢,循環結束。


我們不難看出,在 for loop 中,變量值的多寡,決定循環的次數。
然而,變量在循環中是否使用則不一定,得視設計需求而定。
倘若 for loop 沒有使用 in 這個 keyword 來指定變量值清單的話,其值將從 $@ (或 $* )中繼承:


[Copy to clipboard] [ - ]
CODE:
for var; do
....
done

(若你忘記了 positional parameter ,請溫習第 9 章...)

for loop 用於處理"清單"(list)項目非常方便,
其清單除了可明確指定或從 positional parameter 取得之外,
也可從變量替換或命令替換取得... (再一次提醒:別忘了命令行的"重組"特性﹗)
然而,對於一些"累計變化"的項目(如整數加減),for 亦能處理:


[Copy to clipboard] [ - ]
CODE:
for ((i=1;i<=10;i++))
do
echo "num is $i"
done

除了 for loop ,上面的例子我們也可改用 while loop 來做到:


[Copy to clipboard] [ - ]
CODE:
num=1
while [ "$num" -le 10 ]; do
echo "num is $num"
num=$(($num + 1))
done

while loop 的原理與 for loop 稍有不同:
它不是逐次處理清單中的變量值,而是取決於 while 後面的命令行之 return value :
* 若為 ture ,則執行 do 與 done 之間的命令,然後重新判斷 while 後的 return value 。
* 若為 false ,則不再執行 do 與 done 之間的命令而結束循環。
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册