0

我写了下面的脚本。


#! /usr/bin/expect
set timeout 180
spawn /vobs/iov/rnc/bin/moshell/moshell -d db.dat
expect {
  -re "OFFLINE_DB.DAT.*" { }
        timeout        { 
     error "\n######## Timeout - when logging in\n"
 }
        eof            { 
     error "\n######## eof - when logging in\n"
 } 
}

set db_prompt "SQL>"
send "select id from motype_r1 where data = 'PlugInUnit';\r"
expect {
  -re "OFFLINE_DB.DAT>"  
}    
 exit

现在,我想在变量中获取表的输出,即

+------+
| id   |
+------+
|   19 |
+------+
Query Done: 1 record selected

并匹配正则表达式以在另一个变量中获得“19”。

任何人都可以帮我解决问题。

/阿克夏

4

1 回答 1

1

在这段代码中,您应该能够使用正则表达式来匹配 SELECT 查询的输出,然后将其存储在变量中。

send "select id from motype_r1 where data = 'PlugInUnit';\r"
expect {
  -re {(\|[^\d]*(\d+).*\|)} { set id $expect_out(1,string) ; exp_continue }
  -re "OFFLINE_DB.DAT>"  
}

(请原谅我使用的有点难看的正则表达式,但它应该与 return 语句中的最后一个数字 id 匹配。)

指的$expect_out(1,string)是正则表达式中的第一个字符串匹配,然后 exp_continue 将导致 expect 继续期待输出,直到它看到“OFFLINE_DB.DAT”消息(顺便说一下,我认为不需要-re前缀)。

希望有效!

于 2010-07-21T13:35:53.457 回答