日常工作中,不能做太多重复性的工作。比如我们要确认网络是否连通,传统的方法是使用ping命令不断测试某个地址(比如百度)。网络好是可以的,但是如果网络不好,那就需要一直运行ping命令了。作为程序员,怎么能容忍重复的工作呢?只要是重复性的工作,都可以用编程来解决!下面良旭将介绍两种重复执行一条命令直到成功运行的方法。(PS:本文适合初学者,高手可以绕过)解决重复性任务,自然而然会想到循环。在Shell中,循环不超过三种:for、while和until。在本文中,我们使用后两个循环:while和until。关于这两个循环,有编程基础的朋友应该不陌生,这里就来复习一下。对于while循环,如果循环条件为真,它将重复执行循环体(包含在do...done结构中),直到循环条件变为假。至于until循环,它正好与while循环相反。当循环条件为假时,会重复执行循环体(包含在do...done结构中),直到循环条件为真。好了,在回顾了基础知识之后,让我们看看如何使用这两个循环来实现我们的目标。1、使用while循环仍然是反复测试网络连通性的例子。我们可以用下面的命令来解放双手:$while!ping-c3baidu.com;dosleep2;done;echosucceed对于这个命令,它会重复执行ping命令,如果不成功,它会休眠2秒,然后继续尝试直到成功。成功后,终端会打印succeed字样。简介:我们将对这条命令进行分解,然后简要介绍各个模块的作用。$while!ping-c3baidu.com;这是一个循环条件。我们的需求是“当ping命令失败时,执行循环体”,所以需要加一个!平之前。$dosleep2;完毕;这部分是循环体。当循环条件为真时,进入循环体。为了不让这个程序抢太多资源,我们在循环体中休眠了2秒。一旦循环条件不成立,跳出循环体。$回声成功;这部分是跳出循环体后执行的语句,打印一个字succeed就可以了,当然还可以做其他事情。2.使用until循环我们使用until循环来完成同样的事情,写法如下:$untilping-c3baidu.com;dosleep2;done;echosucceed实现的效果同上,不同的是循环条件为真,退出循环。让我们也简单地分解一下。$untilping-c3baidu.com;这部分是循环条件,会执行ping命令,执行结果作为判断依据。直到ping命令执行成功才退出循环。$dosleep2;循环身体,睡眠2秒。$echosucceed成功后做什么。3.重复最后一条命令,直到成功。这里展开一下。如何重复上一条命令直到成功?我们知道,如果要重复上一条命令,可以使用这个命令:$!!那么如何判断最后一条命令是否执行成功呢?我们可以判断$?的值是否?为0。#while循环写$!!;while[$?-ne0];do!!;done#until循环写$until!!;do:;done本文授权转载自公众号《良旭》Linux”。世界500强外企Linux开发工程师梁旭,在公众号分享大量Linux干货,欢迎关注!
