溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功

發(fā)布時(shí)間:2021-12-17 14:02:04 來源:億速云 閱讀:1670 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功”吧!

解決重復(fù)性的工作,自然而然會(huì)想到循環(huán) 。在 Shell 里,循環(huán)無非 3 種:for、while、until 。在本文里,我們使用后兩種循環(huán):while 、until 。

關(guān)于這兩種循環(huán),有編程基礎(chǔ)的小伙伴應(yīng)該是比較熟悉的了,這里再復(fù)習(xí)一下。

對于 while 循環(huán),在循環(huán)條件是 true 的情況下,它會(huì)重復(fù)執(zhí)行循環(huán)體(包含在 do ... done 結(jié)構(gòu)體里),直到循環(huán)條件變成 false 。

而對于 untile 循環(huán),剛好與 while 循環(huán)相反,在循環(huán)條件是 false 的情況下,它會(huì)重復(fù)執(zhí)行循環(huán)體(包含在 do ... done 結(jié)構(gòu)體里),直到循環(huán)條件變成 true 。

好了,復(fù)習(xí)完基礎(chǔ)知識,我們再來看看如何用這兩個(gè)循環(huán)實(shí)現(xiàn)我們的目的。

1. 使用 while 循環(huán)

還是以重復(fù)測試網(wǎng)絡(luò)連通性為例。我們可以使用以下命令來解放我們的雙手:

$ while ! ping -c 3 baidu.com ; 
do sleep 2 ; 
done ; 
echo succeed

對于這條命令,它將重復(fù)執(zhí)行 ping 命令,如果不成功,則 sleep 2 秒之后繼續(xù)嘗試,直到成功。成功之后,將在終端打印 succeed 字樣。

簡單介紹:

我們將這個(gè)命令分解開,然后簡要介紹各個(gè)模塊的作用。

$ 
while ! ping -c 
3 baidu.com ;

這是循環(huán)條件,我們的要求是「當(dāng) ping 命令執(zhí)行失敗時(shí),執(zhí)行循環(huán)體」,所以我們要在 ping 之前加一個(gè) ! 。

$ do sleep 2 ; 
done ;

這部分就是循環(huán)體。當(dāng)循環(huán)條件成立時(shí),就進(jìn)入到循環(huán)體。為了不讓這個(gè)程序搶占太多資源,我們在循環(huán)體里睡眠 2 秒。一旦循環(huán)條件不成立時(shí),就跳出循環(huán)體。

$ echo succeed ;

這部分是跳出循環(huán)體之后執(zhí)行的語句,僅僅是打印一個(gè) succeed 字樣,當(dāng)然你要做其它事也可以。

在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功

2. 使用 until 循環(huán)

我們使用 until 循環(huán)來完成同樣的事情,它的寫法如下:

$ until ping -c 3 baidu.com ; 
do sleep 2 ; 
done ; 
echo succeed

實(shí)現(xiàn)的效果與上面無異,所不同的是,當(dāng)循環(huán)條件為真時(shí),退出循環(huán)。

我們也來簡單拆解一下。

$ 
until ping -c 
3 baidu.com ;

這部分是循環(huán)條件,它將執(zhí)行 ping 命令,執(zhí)行結(jié)果作為判斷依據(jù)。直到 ping 命令執(zhí)行成功時(shí),才退出循環(huán)。

$ 
do sleep 2 ;

循環(huán)體,睡眠 2 秒。

$ echo succeed

成功后做的事情。

在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功

3. 重復(fù)執(zhí)行上個(gè)命令直到成功

這里再額外拓展一下,如何重復(fù)執(zhí)行上個(gè)命令直到成功?

我們知道,想要重復(fù)運(yùn)行上次的命令,可以使用這個(gè)命令:

$ !!

那如何判斷上個(gè)命令執(zhí)行是否成功呢?我們可以通過判斷 $? 的值是否為 0 來確定。

# 
while 循環(huán)寫法
$ !!; while [ $? -ne 0 ]; do !!; done

# until 循環(huán)寫法
$ until !!; do :; done

感謝各位的閱讀,以上就是“在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對在Shell里怎么重復(fù)執(zhí)行一條命令直到運(yùn)行成功這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI