1.15运行命令直至执行成功

在日常工作中使用shell时,有时候命令只有满足某些条件或是某种外部事件,操作才能够成功执行,这种情况下,你可能系统重复执行命令,直至成功为止。

1、按照以下方式定义函数:

repeat()

{

  while true

  do

    [email protected] && return

  done

}

或者把它放入shell的rc文件,更便于使用:

repeat()

{

  while ture;

  do

[email protected] && return ;done

}

2、工作原理

创建了一个函数repeat,它包含了一个无限while循环,该循环执行以参数形式(通过[email protected]访问)传入函数的命令。如果命令执行成功,则返回,进而退出循环。

3、补充内容

a、一种更快的做法

大多数现代系统中,true是作为/bin中的一个二进制文件来是实现的,这就意味着每执行一次while循环,shell就不得不生成一个进程。如果不想这样,可以使用shell内建的“:”命令,它总是会返回为0的退出码:

repeat(){while:;do [email protected] &&return;done}

b、增加延时

假设要用repeat()从internet上下载一个暂时不可用的文件,不过这个文件只需要等一会儿就能下载,方法如下

repeat wget c http://www.example.com/software-0.1.tar.gz

如果使用这种方式,会不断的向服务器发送命令,服务器可能会把自己拉黑,故修改repeat

repeat(){while :;do [email protected] && return;sleep 30;done}

时间: 2024-10-16 03:01:05

1.15运行命令直至执行成功的相关文章

shell脚本中判断上一个命令是否执行成功

2018-12-21 shell中使用符号"$?"来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功 示例如下: if [ $? -ne 0 ]; then echo "failed" else echo "succeed" fi 或者: if [ $? -eq 0 ]; then echo "succeed" else echo "failed&

linux中判断一个命令是否执行成功

每一条基本命令执行后都有一个返回码,该返回码是用$?表示,执行成功的返回码是0,例如: if [ $? -ne 0 ];then 上一命令执行失败时的操作 else 上一命令执行成功时的操作fi 例如linux中启动JBoss判断是否启动成功 service IMX_JBossAS startif [$? -ne 0 ];then echo "失败"else echo "成功"fi

crontab 命令行执行成功,定时任务报错

crontab的定时任务不能自动执行,但是手动执行脚本一直能成功.查到最后,发现是脚本里用了系统的环境变量. 1.因为我只有普通用户(sh用户)的权限,首先自己可以写一个简单的脚本测试一下自己计划任务能否使用.(我的可以) 2.手动执行你的脚本(确认脚本没有问题) 1)脚本中涉及文件路径时写全局路径: [[email protected] yoon]$ cat start.sh$SPARK_HOME/bin/spark-submit \--driver-class-path /home/shdx

crontab这个坑,执行单个命令执行成功,但是写到crontab怎么也不行

昨天开始,一直在弄通过定时任务控制熄屏,在终端下的单个命令可以执行成功,写到脚本里,单个执行脚本能成功,但是写到crontab定时任务,怎么也不熄屏,但他确实执行了,看日志,是一直报错的:百度了很多很多,基本上都是说环境变量的原因,然后试了又试,一直不行,下午在群里问了问,一位大哥给我一步一步分析,后来明白了: crontab 执行任务是在系统里面执行,执行的时候是没有终端的: 我的想法是既然没有终端我就弄个终端给你执行这条熄屏命令: */1 * * * * export DISPLAY=:0.

shell脚本linux命令连续执行

shell命令连续执行的三种方式: 1.命令1:命令2:命令3 依次执行命令,无论前一条命令是否执行成功. 2.命令1 && 命令2 && 命令3 前一条命令执行成功后才会执行下一条命令. 3.命令1 || 命令2 || 命令3 前一条命令执行失败才会执行下一条命令. 原文地址:https://www.cnblogs.com/smallredness/p/9241775.html

linux shell 多个命令一起执行的几种方法

在命令行可以一次执行多个命令,有以下几种: 1.每个命令之间用 ; 隔开 说明:各命令的执行结果,不会影响其它命令的执行.换句话说,各个命令都会执行, 但不保证每个命令都执行成功. cd /home/PyTest/src; python suning.py 2.每个命令之间用&&隔开 说明:若前面的命令执行成功,才会去执行后面的命令.这样可以保证所有的命令执行完毕后,执行过程都是成功的. cd /home/PyTest/src&&python suning.py 3.每个命

java工程打成jar包在命令行执行运行缓慢问题解决

一个普通的java工程,用cxf连接webserivice.在eclipse下运行正常,但用eclipse达成jar包,在命令行执行却异常缓慢. 通过一些尝试,发现是因为打包的方式不对.eclipse导出可运行jar包有三种方式,分别为: 1.Extract required libraries into generated JAR 2.Package required libraries into generated JAR 3.Copy required libraries into  a

解决命令行执行shell脚本成功,但crontab执行失败

实际生产案例 生产机房自建PPTP客户端通过拨号连接到生产机房,但是一旦客户端网络是意外断线再重新拨号 会产生IP冲突,于是写了一个脚本监控PPTP的IP是否有多个(一般冲突以后会生成2个IP) #!/bin/bash #author Liuyueming . /etc/profile #开始没有加这个环境变量 for i in {10..35} do n=`ifconfig|grep 10.13.0.${i}|wc -l` #循环取ip并计数 # echo `ifconfig|grep 10.

nobup 与 后台运行命令

1. Linux进程状态:R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态) 2. Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可处理signal 3. Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 可处理signal, 有延迟 4. Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态, 不可处理signal, 因为根