Bash 如果预期条件未满足RHEL,则退出代码
我在Red Hat Linux 8中使用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.
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}
}