在这个简短的指南中,我们将学习如何重复一个命令,直到它在 Linux 中成功。 这在很多情况下都会有所帮助。 例如,您可以使用此方法来验证两个或多个主机之间的网络连接,或者检查 Internet 连接以查看您是否仍然在线或离线。 因此,无论原因是什么,如果您想重复 Linux 命令或程序直到成功结束,本指南都会有所帮助。
在 Linux 中重复命令直到成功
对于命令列表的重复执行,我们使用以下 BASH 循环结构:
- 虽然循环,
- 直到循环。
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 命令来锤击系统。 我们指示系统稍等片刻,因为 example 2 秒,然后尝试 ping ostechnix.com。 换句话说,While 命令将每 2 秒 ping 一次该站点。 一旦条件变为假,while 循环将终止。
xcalc ;
运行 xcalc 程序。 该程序只有在前一个命令成功执行后才会运行。
所以按照上面的命令,如果条件为真(即如果 ostechnix.com 是“不”可达的),它将执行包含在 做…做. 在这里,代码是“睡眠 2”。 因此它等待 2 秒,然后再次尝试 ping 站点。 它将继续执行,直到条件变为 false。 一旦条件变为假(即如果 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循环重复命令
您也可以使用下面的“直到”循环来执行此操作。
$ 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 程序。 它只会在成功执行先前的命令后运行。
因此,根据上述命令,Until 循环将继续 ping ostechnix.com,直到成功。 一旦站点可以访问,直到循环将结束,xcalc 程序将打开。
相关阅读:
- 如何永远每隔 X 秒运行一次 Linux 命令
3.重复以前的命令
我们现在知道如何执行 Linux 命令,直到它成功退出。 前面的命令呢? 你如何重复或重试前面的命令直到它们成功? 这也很容易!
我们已经发布了重复上一个命令的不同方法。 如果您不知道如何操作,请参阅以下指南。
- 在 Linux 中重复上一个命令的不同方法
如上面的链接所述,要执行任何最后执行的命令,只需键入 双感叹号,然后按如下所示的 ENTER:
$ !!
这将执行最后一个命令。
因此,如果您想重复之前的命令,直到它们使用 While 循环成功,请运行:
$ !!; while [ $? -ne 0 ]; do !!; done
要重复以前的命令,直到它们使用直到循环成功,请运行:
$ until !!; do :; done
有关 Bash While 循环和Until 循环的更多示例,请参阅以下指南:
- Bash 脚本 – 用示例解释 While 和 until 循环