如何在Linux的bash中永遠(yuǎn)循環(huán)
在 Linux 中有很多永遠(yuǎn)循環(huán)(或直到你決定停止)的方法,你可以在命令行或腳本中執(zhí)行此操作。
for
和 while
命令使這件事非常容易。關(guān)于相應(yīng)的語(yǔ)法和策略,只有幾件事要牢記。
使用 while
最簡(jiǎn)單的永遠(yuǎn)循環(huán)之一是使用 while
命令,后面跟上條件 true
。 你不必使用諸如 while [ 1 -eq 1 ]
之類的邏輯或類似的測(cè)試。 while true
測(cè)試表示循環(huán)將一直運(yùn)行,直到你使用 CTRL-C
停止循環(huán)、關(guān)閉終端窗口或注銷為止。這是一個(gè)例子:
$ while true
> do
> echo Keep running
> sleep 3
> done
Keep running
Keep running
Keep running
^C
你也可以使用 while :
做同樣的事情。這里的關(guān)鍵是 :
總是返回成功,因此就像 while true
一樣,此測(cè)試永遠(yuǎn)不會(huì)失敗,并且循環(huán)會(huì)繼續(xù)運(yùn)行:
$ while :
> do
> echo Keep running
> sleep 3
> done
Keep running
Keep running
^C
如果你在腳本中插入了無(wú)限循環(huán),并想提醒使用它的人如何退出腳本,那么可以使用 echo
命令添加提示:
while :
do
echo Keep running
echo "Press CTRL+C to exit"
sleep 1
done
使用 for
for
命令還提供了一種永遠(yuǎn)循環(huán)的簡(jiǎn)便方法。雖然不如 while true
明顯,但語(yǔ)法相當(dāng)簡(jiǎn)單。你只需要在有界循環(huán)中替換參數(shù)即可,它通常類似于 “c 從等于 1 開(kāi)始遞增,直到 5”:
$ for (( c=1; c<=5; c++ ))
不指定任何參數(shù)的情況下:
$ for (( ; ; ))
沒(méi)有起始值、增量或退出測(cè)試,此循環(huán)將永遠(yuǎn)運(yùn)行或被強(qiáng)制停止:
$ for (( ; ; ))
> do
> echo Keep running
> echo “Press CTRL+C to exit”
> sleep 2
> done
Keep your spirits up
Keep your spirits up
Keep your spirits up
為什么要永遠(yuǎn)循環(huán)?
在現(xiàn)實(shí)中,你不會(huì)想永遠(yuǎn)循環(huán)下去,但一直運(yùn)行直到想要回家、工作完成或者遇到問(wèn)題才退出并不罕見(jiàn)。任何構(gòu)造為無(wú)限循環(huán)的循環(huán)都可以設(shè)置為根據(jù)各種情況退出。
該腳本將一直處理數(shù)據(jù)直到下午 5 點(diǎn),或者說(shuō)檢查發(fā)現(xiàn)第一次超過(guò) 5 點(diǎn)的時(shí)間:
#!/bin/bash
while true
do
if [ `date +%H` -ge 17 ]; then
exit # exit script
fi
echo keep running
~/bin/process_data # do some work
done
如果要退出循環(huán)而不是退出腳本,請(qǐng)使用 break
命令而不是 exit
。
#!/bin/bash
while true
do
if [ `date +%H` -ge 17 ]; then
break # exit loop
fi
echo keep running
~/bin/process_data
done
… run other commands here …
總結(jié)
永遠(yuǎn)循環(huán)很容易。指定要停止循環(huán)的條件卻需要花費(fèi)一些額外的精力。