expect和shell脚本中的正则表达式

时间:2014-07-17 02:03:27

标签: regex linux bash awk expect

朋友们,我试图使用expect自动化路由,基本上它是我需要记录一些数据的特殊设备中的调试插件,访问这个调试插件,我的公司需要给我一个基于挑战键的响应键,它的很多主持人,我需要在星期五之前提供这个,这是我到目前为止所做的。

#!/usr/bin/expect -f

match_max 10000


set f [open "cimc.txt"]
set hosts [split [read $f] "\n"]
close $f

foreach host $hosts {
spawn ssh ucs-local\\marcos@10.2.8.2
expect "Password: "
send "Temp1234\r"
expect "# "
send "connect cimc $host\r"
expect "# "
send "load debug plugin\r"
expect "ResponseKey#>"
sleep 2
set buffer $expect_out(buffer)
set fid [open output.txt w]
puts $fid $buffer
close $fid
sleep 10
spawn ./find-chag.sh
sleep 2
set b [open "key.txt"]
set challenge [read $b]
close $b
spawn ./find-rep.sh $challenge
sleep 3
set c [open "rep.txt"]
set response [read $c]
close $c
puts Response-IS
send "\r"
expect "ResponseKey#> "
send "$response"

}

$ cat find-chag.sh
cat output.txt | awk 'match($0,"ChallengeKey"){print substr($0,RSTART+15,38)}' > key.txt

$ cat find-rep.sh
curl bla-blabla.com/CIMC-key/generate?key=$1 | grep ResponseAuth | awk 'match($0,"</td><td>"){print substr($0,RSTART+9,35)}' > rep.txt

我不知道如何使用regexp期望所以我把缓冲区输出放到一个文件并使用bash脚本,问题是我用spawn运行脚本后看起来像我的ssh会话丢失了,有没有人有任何提示?我应该使用其他东西而不是spawn来调用我的脚本吗?

1 个答案:

答案 0 :(得分:2)

expect -re "my tcl compatible regular expression goes here"

应该允许你使用正则表达式。