EXPECT script HELP


 
Thread Tools Search this Thread
Top Forums Programming EXPECT script HELP
# 1  
Old 10-03-2011
EXPECT script HELP

Code:
#!/usr/local/bin/expect

if {$argc <6} {
        puts "Usage: stp_priority <switch_ip> <ts_port> <stp_vlan> <port1> <port2>"
        } else {
                puts "Wrong number of arguments passed"
                exit
                }


        set switch_ip [lindex $argv 0]
        set ts_port [lindex $argv 1]
        set stp_vlan [lindex $argv 2]
        set port1 [lindex $argv 3]
        set port2 [lindex $argv 4]


        if {$ts_port != ""} {
                spawn telnet $switch_ip $ts_port
                } else {
                spawn telnet $switch_ip
                }

        set timeout 20
        expect_after {
                timeout {puts "TIMEOUT"; continue}
                }
        send "iscli\r"
        set timeout 20
        expect_after {
                timeout {puts "TIMEOUT"; continue}
                }
        send "admin\r"
        expect {
         "):" {
                exp_send "is\r"
              }
         ">"  {
                exp_send "enable\r"
              }
         "#"  {
                exp_send "conf t\r"
              }
          }
        expect "#"
        send "terminal-length 0\r"
        expect "#"
        while {1} {
                expect "#"
                send "sh mp cpu\r"
                sleep 30
                expect "#"
                send "sh mp memory\r"
                sleep 30
                expect "#"
                send "clear counters\r"
                expect -re ".*#"
                sleep 10
                expect "#"
                send "\r"
                expect "#"
                send "show interface port $port1 interface-rate\r"
                slsleep 30
                expect "#"
                set  buff $expect_out(buffer)
                puts "Buff: $buff"
                regexp {(UcastPkts:[\t ]+([0-9]+)[\t ]+([0-9]+))} $buff match
                puts "$match"
                send "\r"
#               expect "#"
#               send "no spanning-tree stp $stp_vlan enable\r"
#               sleep 30
#               expect "#"
#               send "sh spanning-tree stp $stp_vlan information\r"
#               sleep 30
#               expect "#"
#               send "spanning-tree stp $stp_vlan enable\r"
#               sleep 30
#               expect "#"
#               send "sh spanning-tree stp $stp_vlan information\r"
#               sleep 30
        #       expect "#"
        #       send "no ip igmp enable\r"
        #       sleep 30
        #       expect "#"
        #       send "ip igmp enable\r"
        #       sleep 30
        #       expect "#"
        #       send "sh ip igmp groups\r"
        #       sleep 30
                expect "#"
                send "spanning-tree stp $stp_vlan bridge priority 64440\r"
                sleep 30
                expect "#"
                send "sh spanning-tree stp $stp_vlan information\r"
                sleep 30
                expect "#"
                send "spanning-tree stp $stp_vlan bridge priority 4096\r"
                sleep 30
                expect "#"
                send "sh spanning-tree stp $stp_vlan information\r"
                sleep 30
                expect "#"
                send "clear counters\r"
                expect -re ".*#"
                send "\r"
                expect "#"
                send "sh interface port $port1 interface-rate\r"
                sleep 30
                expect "#"
                set buff $expect_out(buffer)
                puts "Buff: $buff"
                regexp {(UcastPkts:[\t ]+([0-9]+)[\t ]+([0-9]+))} $buff match
                puts "$match"
                send "\r"
                sleep 20
                expect eof
                }
sleep 5
send "exit\r"
expect "(y/n)?"
send "y\r"
sleep 5
close
wait

The following EXPECT script is giving me problems and only working for one Iteration. It is giving me the TIMEOUT message as soon as it executes the loop one time. My requirement is to allow the script to run for n number of loops.

Can anyone please suggest what mistake i am making?

Moderator's Comments:
Mod Comment Video tutorial on how to use code tags in The UNIX and Linux Forums.

Last edited by radoulov; 10-03-2011 at 05:00 PM..
# 2  
Old 12-03-2011
Expect with function

Hi,

Try below things.

Code:
#!/usr/local/bin/expect --
set timeout -1
if {$argc <6} {
        puts "Usage: stp_priority <switch_ip> <ts_port> <stp_vlan> <port1> <port2>"
        } else {
                puts "Wrong number of arguments passed"
                exit
                }

        set switch_ip [lindex $argv 0]
        set ts_port [lindex $argv 1]
        set stp_vlan [lindex $argv 2]
        set port1 [lindex $argv 3]
        set port2 [lindex $argv 4]


proc gokcell { komut sonuc } {
 set i 0
while { $i == 0} {
   send -- $komut
   expect { 
         $sonuc { set i 1
                }
        -re "Error*" {          
                set result $expect_out(buffer)
                puts "THE LINE IS $result"
                puts "THE COMMAND is $komut"
                gokcell $komut $sonuc
                exp_continue
        }
 } 
}
}

        if {$ts_port != ""} {
                spawn telnet $switch_ip $ts_port
                } else {
                spawn telnet $switch_ip
                }       
        expect_after {
                timeout {puts "TIMEOUT"; continue}
                }
        gokcell "iscli\r"
        set timeout 20
        expect_after {
                timeout {puts "TIMEOUT"; continue}
                }
        gokcell "admin\r"
        expect {
         "):" {
                exp_gokcell "is\r"
              }
         ">"  {
                exp_gokcell "enable\r"
              }
         "#"  {
                exp_gokcell "conf t\r"
              }
          }
        expect "#"
        gokcell "terminal-length 0\r"
        expect "#"
        while {1} {
                expect "#"
                gokcell "sh mp cpu\r"
                sleep 30
                expect "#"
                gokcell "sh mp memory\r"
                sleep 30
                expect "#"
                gokcell "clear counters\r"
                expect -re ".*#"
                sleep 10
                expect "#"
                gokcell "\r"
                expect "#"
                gokcell "show interface port $port1 interface-rate\r"
                slsleep 30
                expect "#"
                set  buff $expect_out(buffer)
                puts "Buff: $buff"
                regexp {(UcastPkts:[\t ]+([0-9]+)[\t ]+([0-9]+))} $buff match
                puts "$match"
                gokcell "\r"
#               expect "#"
#               gokcell "no spanning-tree stp $stp_vlan enable\r"
#               sleep 30
#               expect "#"
#               gokcell "sh spanning-tree stp $stp_vlan information\r"
#               sleep 30
#               expect "#"
#               gokcell "spanning-tree stp $stp_vlan enable\r"
#               sleep 30
#               expect "#"
#               gokcell "sh spanning-tree stp $stp_vlan information\r"
#               sleep 30
        #       expect "#"
        #       gokcell "no ip igmp enable\r"
        #       sleep 30
        #       expect "#"
        #       gokcell "ip igmp enable\r"
        #       sleep 30
        #       expect "#"
        #       gokcell "sh ip igmp groups\r"
        #       sleep 30
                expect "#"
                gokcell "spanning-tree stp $stp_vlan bridge priority 64440\r"
                sleep 30
                expect "#"
                gokcell "sh spanning-tree stp $stp_vlan information\r"
                sleep 30
                expect "#"
                gokcell "spanning-tree stp $stp_vlan bridge priority 4096\r"
                sleep 30
                expect "#"
                gokcell "sh spanning-tree stp $stp_vlan information\r"
                sleep 30
                expect "#"
                gokcell "clear counters\r"
                expect -re ".*#"
                gokcell "\r"
                expect "#"
                gokcell "sh interface port $port1 interface-rate\r"
                sleep 30
                expect "#"
                set buff $expect_out(buffer)
                puts "Buff: $buff"
                regexp {(UcastPkts:[\t ]+([0-9]+)[\t ]+([0-9]+))} $buff match
                puts "$match"
                gokcell "\r"
                sleep 20
                expect eof
                }
sleep 5
gokcell "exit\r"
expect "(y/n)?"
gokcell "y\r"
sleep 5
close
wait



Regards,

Goksel Yangin
Computer Engineer

Last edited by DukeNuke2; 12-04-2011 at 04:23 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Expect script returning string following a found expect.

I'm fairly new to scripting so this might not be possible. I am using Expect with Cisco switches and need to capture the string after finding the expect request. For example, when I issue "show version" on a Nexus switch, I'm looking to capture the current firmware version: #show version ... (0 Replies)
Discussion started by: IBGaryA
0 Replies

2. Shell Programming and Scripting

SFTP or scp with password in a batch script without using SSH keys and expect script

Dear All, I have a requirement where I have to SFTP or SCP a file in a batch script. Unfortunately, the destination server setup is such that it doesn't allow for shell command line login. So, I am not able to set up SSH keys. My source server is having issues with Expect. So, unable to use... (5 Replies)
Discussion started by: ss112233
5 Replies

3. Programming

Calling another expect script inside an expect script

I have an expect script called remote that I want to call from inside my expect script called sudoers.push, here is the code that is causing me issues: set REMOTE "/root/scripts/remote" ... log_user 1 send_user "Executing remote script as $user...\n" send_user "Command to execute is: $REMOTE... (1 Reply)
Discussion started by: brettski
1 Replies

4. UNIX for Advanced & Expert Users

Unable to run the script on remote machine Using Expect script

Not able to execute the file in remote host using except utility I am automating the SFTP keys setp process: So i created the expect script for controlling the output of shell below is my main code: Code: #!/usr/bin/expect set fd set password close $fd set df set app close $df... (1 Reply)
Discussion started by: Manoj Bajpai
1 Replies

5. Programming

Calling expect script inside another expect

Hi, Am very new to expect scripting.. Can You please suggest me how to call an expect script inside another expect script.. I tried with spawn /usr/bin/ksh send "expect main.exp\r" expect $root_prompt and spawn /usr/bin/ksh send "main.exp\r" expect $root_prompt Both... (1 Reply)
Discussion started by: Priya Amaresh
1 Replies

6. Shell Programming and Scripting

Expect script to execute a script on a remote host

Hi, I am new to the expect scripting. I have this expect script as below : spawn ssh remote_server -l id set pass "12345" set opt "s" expect "Password:" {send "$pass\r" ; } expect "*ENTER*" {send "Enter\r"; exp_continue } expect "Please select option :" {send... (2 Replies)
Discussion started by: curt137
2 Replies

7. Shell Programming and Scripting

Expect script help needed- script failing if router unavailable

Hey all. Sometimes I'm tasked to change some router configs for the entire network (over 3,000 Cisco routers). Most of the time its a global config parameter so its done with a loop and an IP list as its the same configuration change for all routers. This is working OK. However, sometimes an... (3 Replies)
Discussion started by: mrkz1974
3 Replies

8. Programming

Expect script to run a Shell script on remote server

Hi All, I am using a expect script to run a shell script on remote server, the code is as follows. But the problem is that it executes only first command, and hangs it doesn't run the next commands. spawn ssh $uid@$host expect "password:" send "$password\r" expect "*\r" send... (2 Replies)
Discussion started by: yashwanthsn
2 Replies

9. Shell Programming and Scripting

Need help with Expect script for Cisco IPS Sensors, Expect sleep and quoting

This Expect script provides expect with a list of IP addresses to Cisco IPS sensors and commands to configure Cisco IPS sensors. The user, password, IP addresses, prompt regex, etc. have been anonymized. In general this script will log into the sensors and send commands successfully but there are... (1 Reply)
Discussion started by: genewolfe
1 Replies

10. Shell Programming and Scripting

strange expect script behavior, or am i misunderstanding expect scripting?

Hello to all...this is my first post (so please go easy). :) I feel pretty solid at expect scripting, but I'm running into an issue that I'm not able to wrap my head around. I wrote a script that is a little advanced for logging into a remote Linux machine and changing text in a file using sed.... (2 Replies)
Discussion started by: v1k0d3n
2 Replies
Login or Register to Ask a Question