千家信息网

在Shell里怎么重复执行一条命令直到运行成功

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,这篇文章主要讲解了"在Shell里怎么重复执行一条命令直到运行成功",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在Shell里怎么重复执行一条命令直到
千家信息网最后更新 2024年10月20日在Shell里怎么重复执行一条命令直到运行成功

这篇文章主要讲解了"在Shell里怎么重复执行一条命令直到运行成功",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在Shell里怎么重复执行一条命令直到运行成功"吧!

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

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

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

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

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

1. 使用 while 循环

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

$ while ! ping -c 3 baidu.com ; do sleep 2 ; done ; echo succeed

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

简单介绍:

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

$ while ! ping -c 3 baidu.com ;

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

$ do sleep 2 ; done ;

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

$ echo succeed ;

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

2. 使用 until 循环

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

$ until ping -c 3 baidu.com ; do sleep 2 ; done ; echo succeed

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

我们也来简单拆解一下。

$ until ping -c 3 baidu.com ;

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

$ do sleep 2 ;

循环体,睡眠 2 秒。

$ echo succeed

成功后做的事情。

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

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

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

$ !!

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

# while 循环写法
$ !!; while [ $? -ne 0 ]; do !!; done

# until 循环写法
$ until !!; do :; done

感谢各位的阅读,以上就是"在Shell里怎么重复执行一条命令直到运行成功"的内容了,经过本文的学习后,相信大家对在Shell里怎么重复执行一条命令直到运行成功这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

循环 命令 成功 循环体 条件 运行 写法 情况 学习 事情 内容 基础 字样 就是 知识 结构 复习 睡眠 不同 自然而然 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 建党100周年网络安全措施 四项活动网络安全宣传 松下服务器err15 软件开发要穿工服吗 众创众惠互联网科技有限公司 软件开发需要编写测试用例 安宁区网络安全周启动仪式 一个软件开发的计划书 确保我市网络安全稳定 惠普G8服务器指示灯正常 维修平台app软件开发 中国网络安全方面的院士 java怎么拦截数据库查询 数据库控条 搭建自用nsa服务器 山东云服务器网站云主机 中职生班级网络安全主题班会 厦门专业软件开发公司推荐 网络安全学科培养 枣庄民主评议软件开发 数据库数据查询的相关理论 武汉斑马网络技术怎样谈薪资 使用数据库设计器进行查询 惠普G8服务器指示灯正常 计算机软件开发如何就业 普陀区互联网led大屏服务器 dell服务器可以做固定资产吗 数据库表结构设计要求有哪些 阿里云服务器管理小程序 虹口区立体化软件开发种类
0