如何重复执行一条命令直至运行成功?
2020-05-26 16:04:38来源:博客园 阅读 ()
如何重复执行一条命令直至运行成功?
大家好,我是良许。
在我们的日常工作中,需要我们重复做的工作简直不能太多。比如,我们想要确认网络是否是连通的,传统的做法就是使用 ping
命令不停去测试某个地址(比如百度)。网络比较好还好说,但如果网络很差,那么就需要一直去运行 ping
命令。
作为程序员,重复性的工作怎么能忍呢?只要是重复性的工作,就有可能使用编程的方式来解决!
下面良许就介绍两种方法重复执行一条命令直至运行成功。
(PS:本文适合初学者,高手可绕道)
解决重复性的工作,自然而然会想到循环
。在 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
看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!
- 关注原创公众号「良许Linux」,第一时间获取最新Linux干货!
- 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
- 关注我的博客:lxlinux.net
原文链接:https://www.cnblogs.com/yychuyu/p/12967366.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Bash Shell基础笔记
- Linux系统如何设置开机自动运行脚本? 2020-06-11
- 信息泄漏时代,如何让自己的密码更安全? 2020-06-10
- 如何监控 Linux 服务器状态? 2020-06-06
- Xshell如何配置并远程连接Linux服务器详解 2020-05-31
- 如何高效回退到特定层级目录? 2020-05-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash