在Linux中如何重复一个命令,直到它成功

时间:2020-03-21 11:44:50  来源:igfitidea点击:

在此简要教程中,我们将学习如何重复命令,直到它在Linux中成功。
这很多场合都可以有所帮助。
例如,我们可以使用此方法验证两个或者多个主机之间的网络连接或者检查Internet连接,以查看我们是否还在线或者脱机。
因此,无论原因如何,如果我们想重复Linux命令或者程序,直到它成功结束,则此教程将有所帮助。

在Linux中重复一个命令,直到它成功

对于重复执行命令列表,我们使用以下Bash循环构造:

  • while循环,
  • until循环。

当条件为真时,循环执行代码块(在do ...完成中括起来),并保持执行直到条件为false。
一旦条件变为假,终止时循环就会终止。

直到循环与循环相反。
当条件为false时,它执行代码块(在do ...中括起来),并且继续执行直到条件变为真实。
一旦条件变为真,直到循环终止。

首先,让我们了解如何重复Linux命令或者程序,直到它在循环中使用时成功。

1.重复命令,直到在Linux中成功使用循环

看看以下命令:

$while ! ping -c 3 theitroad.com ; do sleep 2 ; done ; xcalc

此命令将继续尝试ping theitroad.com站点。
一旦站点在线,循环将结束并显示"Xcalc"程序。
其中Xcalc是可选的。
这只是为了通知目的。
否则,我们可能需要继续检查终端窗口以验证该命令是否成功。

解释:

让我们分解上面的命令,看看每个语句的表现。

while ! ping -c 3 theitroad.com ;

这是条件声明。
当我们在本声明中看到的时,我们将ping命令置于ping命令!特点。
它用作"不是"条件。
因此,上述行的实际含义是无法ping theitroad.com。

do sleep 2 ; done ;

声明"睡2个",表示每秒反复尝试ping命令,不要锤击系统。
我们指示系统等待一点,例如2秒,然后尝试ping theitroad.com。
换句话说,虽然命令将每2秒一直在旋转。
一旦条件变为假,循环将终止。

xcalc ;

运行Xcalc程序。
此程序仅在成功执行上一个命令后运行。

因此,根据上面的命令,如果条件为true(即,如果theitroad.com是"不"到"),则它将执行封闭的代码块...完成。
其中代码是"睡眠2"。
所以它等待2秒钟,然后再试一次ping。
它将继续执行,直到条件变为假。
一旦条件变为假(如果theitroad.com即可到达),则循环将结束,最后将打开Xcalc程序。

以下是上述命令的示例输出:

ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
ping: theitroad.com: Name or service not known
PING theitroad.com (104.26.5.40) 56(84) bytes of data.
64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=1 ttl=55 time=63.6 ms
64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=2 ttl=55 time=84.8 ms
64 bytes from 104.26.5.40 (104.26.5.40): icmp_seq=3 ttl=55 time=79.9 ms
--- theitroad.com ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 63.602/76.114/84.810/9.068 ms
Warning: Cannot convert string "-adobe-symbol-*-*-*-*-*-120-*-*-*-*-*-*" to type FontStruct

重复命令,直到它在Linux中成功使用直到循环

我们还可以使用以下方式使用"直到"循环。

$until ping -c 3 theitroad.com ; do sleep 2 ; done ; xcalc

让我们分解此命令,并查看每个语句的确实是什么:

until ping -c 3 theitroad.com ;

这是条件声明。
它意味着ping直到到达。

do sleep 2 ; done ;

尝试每2秒钟为每2秒发2秒,直到它到达。
例如,条件变为如下:站点可到达,循环将终止。

xcalc

运行Xcalc程序。
它只会在成功执行以前的命令时运行。

因此,根据上面的命令,直到循环将继续ping theitroad.com,直到它成功。
一旦站点到达,直到循环将结束,Xcalc程序将打开。

重复上一个命令,直到它在Linux中成功

我们现在知道如何将Linux命令才能成功退出。
上一个命令怎么样?
在成功之前,我们如何重复或者重试前一个命令?
这也很容易!

我们已经发布了不同的方法来重复最后一个命令。
如果我们不知道如何执行此操作,请参阅以下教程。

  • 在Linux中重复上次命令的不同方式

如上所述,要执行任何上次执行的命令,只需键入双倍声音标记,然后按照以下方式命中进入:

$!!

这将执行最后一个命令。

因此,如果要重复以前的命令,直到它们在循环中使用时成功使用:

$!!; while [ $? -ne 0 ]; do !!; done

要重复先前的命令,直到它们成功使用直到循环,运行:

$until !!; do :; done