开发者

while loops within expect

I am using ex开发者_开发问答pect within bash. I want my script to telnet into a box, expect a prompt, send a command. If there is a different prompt now, it has to proceed or else it has to send that command again. My script goes like this:

\#!bin/bash  
//I am filling up IP and PORT1 here  
expect -c "    
set timeout -1  
spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
set temp 1  
while( $temp == 1){    
expect {  
Prompt1 { send \"command\" }  
Prompt2 {send \"Yes\"; set done 0}  
}  
}  
"  

Output:

invalid command name "while("  
    while executing  
"while( == 1){" 

Kindly help me.

I tried to change it to while [ $temp == 1] {

I am still facing the error below:

Output:

invalid command name "=="  
    while executing  
"== 1"  
    invoked from within  
"while [  == 1] {  
expect {


This is how I'd implement this:

expect -c '
  set timeout -1  
  spawn telnet [lindex $argv 0] [lindex $argv 1]  
  send "\r"  
  send "\r"  
  expect {  
    Prompt1 {
      send "command"
      exp_continue
    }  
    Prompt2 {
      send "Yes\r"
    }  
  }  
}  
'  $IP $PORT1
  • use single quotes around the expect script to protect expect variables
  • pass the shell variables as arguments to the script.
  • use "exp_continue" to loop instead of an explicit while loop (you had the wrong terminating variable name anyway)


The syntax for while is "while test body". There must be a spce between each of those parts which is why you get the error "no such command while)"

Also, because of tcl quoting rules, 99.99% of the time the test needs to be in curly braces. So, the syntax is:

while {$temp == 1} {

For more information see http://tcl.tk/man/tcl8.5/TclCmd/while.htm

(you probably have other problems related to your choice of shell quotes; this answer addresses your specific question about the while statement)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜