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

在这个简短的指南中,我们将学习如何重复一个命令,直到它在 Linux 中成功。 这在很多情况下都会有帮助。 例如,您可以使用此方法来验证两个或多个主机之间的网络连接或检查 Internet 连接以查看您是否仍然在线或离线。 所以不管是什么原因,如果你想重复一个 Linux 命令或程序直到它成功结束,本指南将有所帮助。

内容

  1. 重复命令直到它在 Linux 中成功
    1. 1.使用While循环重复一个命令直到它成功
    2. 2. 使用直到循环重复一个命令直到它成功
    3. 3. 重复之前的命令直到成功

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

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

  1. 虽然循环,
  2. 直到循环。

While 循环 执行代码块(包含在 做…完成) 当条件是 真的 并继续执行直到条件变为 错误的. 一旦条件变成 错误的,while 循环终止。

直到循环 与 While 循环正好相反。 它执行代码块(包含在 做…完成) 当条件是 错误的 并继续执行直到条件变为 真的. 一旦条件变成 真的,直到循环终止。

首先,让我们看看如何使用 While 循环重复 Linux 命令或程序直到它成功。

1.使用While循环重复一个命令直到它成功

看看下面的命令:

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

此命令将继续尝试 ping ostechnix.com 站点。 一旦站点上线,While 循环将结束并显示 “xcalc” 程序。 在这里,xcalc 是可选的。 它仅用于通知目的。 否则,我们可能需要不断检查终端窗口以验证命令是否成功。

解释:

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

while ! ping -c 3 ostechnix.com ;

这是条件语句。 正如您在此语句中看到的,我们在 ping 命令前加上 特点。 它作为 “不是” 状况。 所以上面这行的实际意思是—— 虽然无法 ping ostechnix.com.

do sleep 2 ; done ;

该声明 “睡觉2”, 表示不要通过每秒重复尝试 ping 命令来破坏系统。 我们指示系统稍等片刻,例如 2 秒,然后尝试 ping ostechnix.com。 换句话说,While 命令将每 2 秒持续 ping 站点。 一旦条件变为假,while 循环将终止。

xcalc ;

运行 xcalc 程序。 这个程序只有在上一个命令成功执行后才会运行。

所以根据上面的命令,如果条件为真(即如果 ostechnix.com 是“不”可达的),它将执行包含在 做…完成. 这里的代码是“sleep 2”。 所以它等待 2 秒钟,然后再次尝试 ping 站点。 它将继续执行,直到条件变为假。 一旦条件变为假(即如果 ostechnix.com 可达),循环将结束,最后 xcalc 程序将打开。

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

ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known ping: ostechnix.com: Name or service not known PING ostechnix.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  --- ostechnix.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

2. 使用直到循环重复一个命令直到它成功

您也可以使用如下所示的“直到”循环来执行此操作。

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

让我们分解这个命令,看看每个语句的作用:

until ping -c 3 ostechnix.com ;

这是条件语句。 这意味着 – ping 直到可以访问该站点。

do sleep 2 ; done ;

尝试每 2 秒 ping 一次该站点,直到可以访问该站点。 一旦条件成立,即站点可达,循环将终止。

xcalc

运行 xcalc 程序。 它只会在成功执行之前的命令后运行。

所以按照上面的命令,直到循环将继续 ping ostechnix.com 直到它成功。 一旦站点可访问,until 循环将结束并且 xcalc 程序将打开。

相关阅读:

  • 如何永远每 X 秒运行一次 Linux 命令

3. 重复之前的命令直到成功

我们现在知道如何执行 Linux 命令,直到它成功退出。 之前的命令呢? 你如何重复或重试前面的命令直到它们成功? 这也很容易!

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

  • 在 Linux 中重复上一个命令的不同方法

如上面的链接所述,要执行任何最后执行的命令,只需键入 双感叹号,然后按如下所示的 ENTER 键:

$ !!

这将执行最后一个命令。

因此,如果您想重复之前的命令,直到它们使用 While 循环成功,请运行:

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

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

$ until !!; do :; done

有关 Bash While 循环和Until 循环的更多示例,请参阅以下指南:

  • Bash 脚本 – 用例子解释 While 和 until 循环

BASHBASH 循环构造Bash 循环Bash 提示命令行LinuxLinux 基础Linux 命令Linux howtoUntil LoopWhile Loop