如何重复执行一条命令直至运行成功?

简介:

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


在我们的日常工作中,需要我们重复做的工作简直不能太多。比如,我们想要确认网络是否是连通的,传统的做法就是使用 ping 命令不停去测试某个地址(比如百度)。网络比较好还好说,但如果网络很差,那么就需要一直去运行 ping 命令。

作为程序员,重复性的工作怎么能忍呢?只要是重复性的工作,就有可能使用编程的方式来解决!

下面良许就介绍两种方法重复执行一条命令直至运行成功。

解决重复性的工作,自然而然会想到循环 。在 Shell 里,循环无非 3 种:for、while、until 。在本文里,我们使用后两种循环:while 、until 。

关于这两种循环,有编程基础的小伙伴应该是比较熟悉的了,这里再复习一下。

对于 while 循环,在循环条件是 true 的情况下,它会重复执行循环体(包含在 do ... done 结构体里),直到循环条件变成 false 。

而对于 untile 循环,刚好与 while 循环相反,在循环条件是 false 的情况下,它会重复执行循环体(包含在 do ... done 结构体里),直到循环条件变成 true 。

好了,复习完基础知识,我们再来看看如何用这两个循环实现我们的目的。

1. 使用 while 循环

还是以重复测试网络连通性为例。我们可以使用以下命令来解放我们的双手:

1

对于这条命令,它将重复执行 ping 命令,如果不成功,则 sleep 2 秒之后继续尝试,直到成功。成功之后,将在终端打印 succeed 字样。

简单介绍:

我们将这个命令分解开,然后简要介绍各个模块的作用。

2

这是循环条件,我们的要求是「当 ping 命令执行失败时,执行循环体」,所以我们要在 ping 之前加一个 ! 。

3

这部分就是循环体。当循环条件成立时,就进入到循环体。为了不让这个程序抢占太多资源,我们在循环体里睡眠 2 秒。一旦循环条件不成立时,就跳出循环体。

4

这部分是跳出循环体之后执行的语句,仅仅是打印一个 succeed 字样,当然你要做其它事也可以。

6

2. 使用 until 循环

我们使用 until 循环来完成同样的事情,它的写法如下:

7

实现的效果与上面无异,所不同的是,当循环条件为真时,退出循环。

我们也来简单拆解一下。

8

这部分是循环条件,它将执行 ping 命令,执行结果作为判断依据。直到 ping 命令执行成功时,才退出循环。

9

循环体,睡眠 2 秒。

10

成功后做的事情。

13

3. 重复执行上个命令直到成功

这里再额外拓展一下,如何重复执行上个命令直到成功?

我们知道,想要重复运行上次的命令,可以使用这个命令:

11

那如何判断上个命令执行是否成功呢?我们可以通过判断 $? 的值是否为 0 来确定。

12

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-26
本文作者:良许Linux
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
1月前
|
Python
改变循环执行的状态
在编程中,循环是常用的控制结构之一,它允许代码块在一定条件下重复执行。然而,有时候我们可能需要在循环执行过程中改变其状态,比如提前终止循环或跳过当前迭代进入下一次迭代。Python提供了break和continue语句,帮助我们改变循环的执行状态。下面,我们将详细介绍如何使用这两个语句来改变循环的执行状态,并附上示例代码。
20 0
|
7月前
|
Go 数据库
sync.Once-保证运行期间的某段代码只会执行一次
sync.Once-保证运行期间的某段代码只会执行一次
42 0
|
10月前
|
算法
【递归可以干什么】1#重复执行某种模式
【递归可以干什么】1#重复执行某种模式
58 0
|
C#
C# 判断当前控制台程序是否重复运行
C# 判断当前控制台程序是否重复运行
125 0
|
Java
面经 - 【多线程】现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
面经 - 【多线程】现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
267 0
|
安全 Linux
5 种方法重复执行历史命令
5 种方法重复执行历史命令
186 0
|
Shell
shell之通过if [ $? != 0 ]判断上次程序是否执行成功
shell之通过if [ $? != 0 ]判断上次程序是否执行成功
527 0
|
程序员 Shell
如何重复执行一条命令直至运行成功?
大家好,我是良许。 在我们的日常工作中,需要我们重复做的工作简直不能太多。比如,我们想要确认网络是否是连通的,传统的做法就是使用 ping 命令不停去测试某个地址(比如百度)。网络比较好还好说,但如果网络很差,那么就需要一直去运行 ping 命令。 作为程序员,重复性的工作怎么能忍呢?只要是重复性的工作,就有可能使用编程的方式来解决! 下面良许就介绍两种方法重复执行一条命令直至运行成功。 (PS:本文适合初学者,高手可绕道) 解决重复性的工作,自然而然会想到循环 。在 Shell 里,循环无非 3 种:for、while、until 。在本文里,我们使用后两种循环:while 、un
160 0
按顺序逐个同步地运行 Gulp 任务
按顺序逐个同步地运行 Gulp 任务 我们在使用gulp的时候,有时候需要按顺序同步的执行gulp任务 gulp-sequence 使用这个插件就可以了 下面是使用方法: var gulpSequence = require('gulp-sequence'); gulp.
1208 0