国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SHELL十三問之十三:for、while 與 until 差在哪

bash shell  中常用的
"循環(huán)" loop 有如下三種:
* for
* while
* until

for loop 是從一個(gè)清單列表中讀進(jìn)變量值,并"依次"的循環(huán)執(zhí)行 do 到 done 之間的命令行。
例:

for var in one two three four five
do
    echo -----------
    echo '$var is '$var
    echo
done

上例的執(zhí)行結(jié)果將會(huì)是:
1) for 會(huì)定義一個(gè)叫 var 的變量,其值依次是 one two three four five 。
2) 因?yàn)橛?5 個(gè)變量值,因此 do 與 done 之間的命令行會(huì)被循環(huán)執(zhí)行 5 次。
3) 每次循環(huán)均用 echo 產(chǎn)生三行句子。
     而第二行中不在 hard quote 之內(nèi)的 $var 會(huì)依次被替換為 one two three four five 。
4) 當(dāng)最后一個(gè)變量值處理完畢,循環(huán)結(jié)束。

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


for var; do
    ....
done

(若你忘記了 positional parameter ,請(qǐng)溫習(xí)第 9 章...)

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


for ((i=1;i<=10;i++))
do
   echo "num is $i"
done

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


num=1
while [ "$num" -le 10 ]; do
    echo "num is $num"
    num=$(($num + 1))
done

while loop 的原理與 for loop 稍有不同:
它不是逐次處理清單中的變量值,而是取決于 while 后面的命令行之 return value :
* 若為 ture ,則執(zhí)行 do 與 done 之間的命令,然后重新判斷 while 后的 return value 。
* 若為 false ,則不再執(zhí)行 do 與 done 之間的命令而結(jié)束循環(huán)。

分析上例:
1) 在 while 之前,定義變量 num=1 。
2) 然后測(cè)試(test) $num 是否小于或等于 10 。
3) 結(jié)果為 true ,于是執(zhí)行 echo 并將 num 的值加一。
4) 再作第二輪測(cè)試,其時(shí) num 的值為 1+1=2 ,依然小于或等于 10,因此為  true ,繼續(xù)循環(huán)。
5) 直到 num 為 10+1=11 時(shí),測(cè)試才會(huì)失敗... 于是結(jié)束循環(huán)。

-
-

我們不難發(fā)現(xiàn):
* 若 while 的測(cè)試結(jié)果永遠(yuǎn)為 true 的話,那循環(huán)將一直永久執(zhí)行下去:


while :; do
    echo looping...
done

上例的" : "是 bash 的 null command ,不做任何動(dòng)作,除了送回 true 的 return value 。
因此這個(gè)循環(huán)不會(huì)結(jié)束,稱作死循環(huán)。
死循環(huán)的產(chǎn)生有可能是故意設(shè)計(jì)的(如跑 daemon),也可能是設(shè)計(jì)錯(cuò)誤。
若要結(jié)束死尋環(huán),可透過 signal 來終止(如按下 ctrl-c )。

一旦你能夠理解 while loop 的話,那,就能理解 until loop :
* 與 while 相反,until 是在 return value 為 false 時(shí)進(jìn)入循環(huán),否則結(jié)束。
因此,前面的例子我們也可以輕松的用  until 來寫:


num=1
until [ ! "$num" -le 10 ]; do
    echo "num is $num"
    num=$(($num + 1))
done

或是:


num=1
until [ "$num" -gt 10 ]; do
    echo "num is $num"
    num=$(($num + 1))
done

okay ,關(guān)于 bash 的三個(gè)常用的 loop 暫時(shí)介紹到這里。
在結(jié)束本章之前,再跟大家補(bǔ)充兩個(gè)與 loop 有關(guān)的命令:
*  break
* continue
這兩個(gè)命令常用在復(fù)合式循環(huán)里,也就是在 do ... done 之間又有更進(jìn)一層的 loop ,
當(dāng)然,用在單一循環(huán)中也未嘗不可啦...  ^_^

break 是用來打斷循環(huán),也就是"強(qiáng)迫結(jié)束" 循環(huán)。
若 break 后面指定一個(gè)數(shù)值 n 的話,則"從里向外"打斷第 n 個(gè)循環(huán),默認(rèn)值為 break 1 ,也就是打斷當(dāng)前的循環(huán)。
在使用 break 時(shí)需要注意的是, 它與 return 及 exit 是不同的:
* break 是結(jié)束 loop
* return 是結(jié)束 function
* exit 是結(jié)束 script/shell

而 continue 則與 break 相反:強(qiáng)迫進(jìn)入下一次循環(huán)動(dòng)作。
若你理解不來的話,那你可簡(jiǎn)單的看成:在 continue 到 done 之間的句子略過而返回循環(huán)頂端...
與 break 相同的是:continue 后面也可指定一個(gè)數(shù)值 n ,以決定繼續(xù)哪一層(從里向外計(jì)算)的循環(huán),
默認(rèn)值為 continue 1 ,也就是繼續(xù)當(dāng)前的循環(huán)。

在 shell script 設(shè)計(jì)中,若能善用 loop ,將能大幅度提高 script 在復(fù)雜條件下的處理能力。
請(qǐng)多加練習(xí)吧....

-----------
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
shell淺談之三for、while、until循環(huán)
Shell 流程控制
shell十三問,為linux學(xué)習(xí)打基礎(chǔ)(三)
Shell中的循環(huán)語句for、while、until實(shí)例講解
小萌新—> Linux高手系列:包管理【二】
Shell 擴(kuò)展:一般最好將變量調(diào)用包括在雙引號(hào)中
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服