若未满足预期条件,则退出代码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. Please restart IPSEC and check!"}
eof {breakr }
}

然而,使用上面的break语句,执行将继续到下一行。我是bash脚本expect的新手。如有任何帮助,将不胜感激

当然你不需要期望:没有什么需要交互的。在普通的bash

result=$( ping -c 2 -i 3 -W 1 "$1 )
if [[ $result == *"100.0% packet loss"* ]]; then
echo "not reachable"
fi

由于您已经在预期中,您可以使用任何Tcl命令:

set result [exec ping -c 2 -i 3 -W 1 $1]
if {[string first { 100.0%} $result] != -1} {
puts "Source not reachable"
}

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


我忘记了Tcl对exec命令的错误处理:如果exec的命令返回非零,或者如果它向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"
}
}

Tcl-wiki 上详尽的文档

我添加了如下代码:

#!/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}
}

最新更新