在这个简短的指南中,我们将学习如何重复一个命令,直到它在 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 命令来破坏系统。 我们指示系统稍等片刻,例如 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