Bash 如果预期条件未满足RHEL,则退出代码

Bash 如果预期条件未满足RHEL,则退出代码,bash,shell,expect,rhel,Bash,Shell,Expect,Rhel,我在Red Hat Linux 8中使用expect编写了一个小代码,以检查是否可以使用ICMP Ping访问主机。我的意图是,如果无法到达目标,那么执行应该中断。请查找下面的代码 #!/usr/bin/expect lassign $argv 1 2 spawn ping -c 2 -i 3 -W 1 $1 expect { " 0%" {puts "Source is reachable!"} " 100%" {puts "Source is not rechable.

我在Red Hat Linux 8中使用
expect
编写了一个小代码,以检查是否可以使用ICMP Ping访问主机。我的意图是,如果无法到达目标,那么执行应该中断。请查找下面的代码

#!/usr/bin/expect
lassign $argv 1 2
spawn ping -c 2 -i 3 -W 1 $1
 expect  {
    " 0%" {puts "Source is reachable!"}
    " 100%" {puts "Source is not rechable. Please restart IPSEC and check!"}
     eof {break\r }
    }

然而,使用上面的break语句,执行将继续到下一行。我不熟悉bash脚本中的
expect
。如果您需要任何帮助,我们将不胜感激。

当然您不需要expect:没有任何东西需要交互。直截了当

result=$(ping-c2-i3-w1“$1)
如果[[$result==*“100.0%数据包丢失”*];则
回音“无法到达”
fi

由于您已经在expect中,您可以使用:

我是expect的超级粉丝,但是如果一个过程不需要交互,有更简单的方法


我忘记了Tcl对
exec
命令的错误处理:如果exec'ed命令返回非零,或者如果它向stderr发出任何输出,exec将抛出错误。执行ping的方法是:

if {[catch {exec ping -c 2 -i 3 -W 1 $1} result] != 0} {
    puts "ping returned non-zero: $result"
    if {[string first { 100.0%} $result] != -1} {
        puts "Source not reachable"
    }
}

我添加了如下代码,代码运行良好:

#!/usr/bin/expect
lassign $argv 1 2
spawn ping -c 2 -i 3 -W 1 $1
expect  {
   " 0%" {puts "Source is rechable!"}
   " 100.0%" {puts "Source is not rechable.Please restart IPSEC and check!";exit 1}
        }

使用“exit”语句hi,但是在这种情况下,使用“expect”时“exit”不起作用。小心,模式可能必须是
“100.0%“
请看一看,您可以使用哪种方式仅使用shell代码编写Expect脚本。谢谢,但在我的代码的后面部分,我将使用ssh连接到此远程服务器,以便使用Expect。这就是为什么我需要一个break语句,它可以在这里与expectFirst一起使用,
break\r
不是expect命令。其次,
break
只允许在一个循环中使用:循环在哪里?嗨,Glenn,使用上面的TCL命令,我得到了以下错误:
2个数据包传输,0个接收,+2个错误,100%数据包丢失,时间2999ms pipe 2子进程在执行“exec ping-c 2-i 3-W 1$1”时异常退出从“set result[exec ping-c 2-i 3-W 1$1]”(文件“/rtest.exp”第5行)中调用
#!/usr/bin/expect
lassign $argv 1 2
spawn ping -c 2 -i 3 -W 1 $1
expect  {
   " 0%" {puts "Source is rechable!"}
   " 100.0%" {puts "Source is not rechable.Please restart IPSEC and check!";exit 1}
        }