如果expr不匹配,expect脚本是否可以停止执行

时间:2013-07-02 05:50:16

标签: perl expect

在expect模块中,如果我期望的表达式不匹配,如何停止程序的执行并退出循环。因为,即使模式不匹配,它继续执行脚本。

前:

#!/usr/bin/perl -w    
use Expect;    
my $handle = new Expect;    
$handle = Expect->spawn("telnet 192.168.1.1");    
$handle->expect(10,'re','sdhj: ');     #The expected string [sdhj: ]is not matching , but even then it goes on executing the below lines    
$handle->send("system\r");    
$handle->expect(10,'re','Password: ');    
$handle->send("12345\r");    

我想要的是,如果预期的表达式不匹配,那么应该使用错误消息停止执行程序。

2 个答案:

答案 0 :(得分:2)

对于这样的简单情况,只需添加or die您想要出现错误消息的地方(将我的错误消息更改为您想要的任何内容):

$handle->expect(10,'re','sdhj: ') or die "Didn't match [sdhj: ] $!"

如果事情变得复杂一点,您可能需要查看Try::Tiny模块。

答案 1 :(得分:0)

尝试:

my $timeout = 10;
my $pattern = 'sdhj:';
$handle->expect($timeout,
                'timeout', sub {die "did not match $pattern in $timeout seconds"},
                '-re',$pattern
);

文档:https://metacpan.org/module/RGIERSIG/Expect-1.21/Expect.pod#object-expect-timeout-match_patterns