自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何重復(fù)執(zhí)行一條命令直至運(yùn)行成功?

系統(tǒng) Linux
作為程序員,重復(fù)性的工作怎么能忍呢?只要是重復(fù)性的工作,就有可能使用編程的方式來(lái)解決!下面良許就介紹兩種方法重復(fù)執(zhí)行一條命令直至運(yùn)行成功。

在我們的日常工作中,需要我們重復(fù)做的工作簡(jiǎn)直不能太多。比如,我們想要確認(rèn)網(wǎng)絡(luò)是否是連通的,傳統(tǒng)的做法就是使用 ping 命令不停去測(cè)試某個(gè)地址(比如百度)。網(wǎng)絡(luò)比較好還好說(shuō),但如果網(wǎng)絡(luò)很差,那么就需要一直去運(yùn)行 ping 命令。

作為程序員,重復(fù)性的工作怎么能忍呢?只要是重復(fù)性的工作,就有可能使用編程的方式來(lái)解決!

下面良許就介紹兩種方法重復(fù)執(zhí)行一條命令直至運(yùn)行成功。

(PS:本文適合初學(xué)者,高手可繞道)

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

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

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

而對(duì)于 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ǔ)知識(shí),我們?cè)賮?lái)看看如何用這兩個(gè)循環(huán)實(shí)現(xiàn)我們的目的。

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

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

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

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

簡(jiǎn)單介紹:

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

  1. $ while ! ping -c 3 baidu.com ; 

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

  1. $ do sleep 2 ; done ; 

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

  1. $ echo succeed ; 

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

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

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

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

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

我們也來(lái)簡(jiǎn)單拆解一下。

  1. $ until ping -c 3 baidu.com ; 

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

  1. $ do sleep 2 ; 

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

  1. $ echo succeed 

成功后做的事情。

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

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

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

  1. $ !! 

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

  1. # while 循環(huán)寫(xiě)法 
  2. $ !!; while [ $? -ne 0 ]; do !!; done 
  3.  
  4. # until 循環(huán)寫(xiě)法 
  5. $ until !!; do :; done 

本文授權(quán)轉(zhuǎn)載自公眾號(hào)「良許Linux」。良許,世界500強(qiáng)外企Linux開(kāi)發(fā)工程師,公眾號(hào)里分享大量Linux干貨,歡迎關(guān)注!

 

責(zé)任編輯:趙寧寧 來(lái)源: 良許Linux
相關(guān)推薦

2024-06-12 13:36:24

2022-02-11 14:43:53

SQL語(yǔ)句C/S架構(gòu)

2015-07-28 11:06:28

日志記錄Linux命令

2023-02-26 23:31:01

SQL數(shù)據(jù)庫(kù)

2011-03-21 17:19:12

LAMPUbuntu

2024-12-17 06:20:00

MySQLSQL語(yǔ)句數(shù)據(jù)庫(kù)

2009-08-05 10:43:19

CISSPBCPDRP

2021-12-02 15:30:55

命令內(nèi)存Linux

2024-08-02 11:48:36

云計(jì)算服務(wù)

2024-07-29 09:49:00

SQLMySQL執(zhí)行

2021-06-03 06:52:11

Redis服務(wù)器命令

2021-06-07 08:37:03

SQL 查詢語(yǔ)句

2021-06-30 07:47:03

Linux CPULinux 系統(tǒng)

2022-05-31 13:58:09

MySQL查詢語(yǔ)句

2018-08-14 08:43:17

服務(wù)器命令CCS系統(tǒng)

2024-02-20 13:43:12

2011-03-16 16:48:32

iptables 清空

2024-04-19 07:31:58

MySQL數(shù)據(jù)庫(kù)

2024-02-01 18:07:37

2022-01-01 18:26:21

nginx
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)