I am new to using expect.I I am running the below code to get the token from a server:
set timeout 20
set token ""
sleep 1
spawn ssh -l $serveruser1 $serverip
-- is used to disable the interpretion of flags by Expect.
expect { -re "OK" { send_user "** Enter command to get the token. \n" send -- "-t $switchtype -s h -c [Long_CLLI:$switchname] -u $switchuser -l auto-sarm -e n \r" } timeout { send_user " Session timeout on $serverip upon LOGIN**\n" exit -1 } }
sleep 1
expect { -indices -re "\n.+\n(.+@)" { set token $expect_out(1,string) send_user "Get the token $token \n"} timeout { send_user " Session timeout upon getting token" exit -1} }
set timeout 20
set token ""
sleep 1
spawn ssh -l $serveruser1 $serverip
# -- is used to disable the interpretion of flags by Expect.
expect {
-re "OK" {
send_user "** Enter command to get the token. **\n"
send -- "-t $switchtype -s h -c \[Long_CLLI:$switchname\] -u $switchuser -l auto-sarm -e n \r"
}
timeout {
send_user "** Session timeout on $serverip upon LOGIN**\n"
exit -1
}
}
sleep 1
expect {
-indices -re "\n.+\n(.+\@)" {
set token $expect_out(1,string)
send_user "**Get the token $token **\n"}
timeout {
send_user "** Session timeout upon getting token**"
exit -1}
}
The code is working fine for most of the switches, however for few it is failing by returning code RE006. Therefore, for those switches iI need to change the switchtype switch type. I have made the below change:
set timeout 60
set token ""
sleep 1
spawn ssh -l $serveruser1 $serverip
-- is used to disable the interpretion of flags by Expect.
expect { -re "OK" { send_user "** Enter command to get the token. \n" send -- "-t $switchtype -s h -c [Long_CLLI:$switchname] -u $switchuser -l auto-sarm -e n \r" } timeout { send_user " Session timeout on $serverip upon LOGIN**\n" exit -1 } }
sleep 1
expect { -re "RE006" { send_user "** Enter command to get the token. \n" send -- "-t $switchtype1 -s h -c [Long_CLLI:$switchname] -u $switchuser -l auto-sarm -e n \r" } timeout { send_user " Session timeout on $serverip upon LOGIN**\n" exit -1 } }
expect { -indices -re "\n.+\n(.+@)" { set token $expect_out(1,string) send_user "Get the token $token \n"} timeout { send_user " Session timeout upon getting token" exit -1} }
set timeout 60
set token ""
sleep 1
spawn ssh -l $serveruser1 $serverip
# -- is used to disable the interpretion of flags by Expect.
expect {
-re "OK" {
send_user "** Enter command to get the token. **\n"
send -- "-t $switchtype -s h -c \[Long_CLLI:$switchname\] -u $switchuser -l auto-sarm -e n \r"
}
timeout {
send_user "** Session timeout on $serverip upon LOGIN**\n"
exit -1
}
}
sleep 1
expect {
-re "RE006" {
send_user "** Enter command to get the token. **\n"
send -- "-t $switchtype1 -s h -c \[Long_CLLI:$switchname\] -u $switchuser -l auto-sarm -e n \r"
}
timeout {
send_user "** Session timeout on $serverip upon LOGIN**\n"
exit -1
}
}
expect {
-indices -re "\n.+\n(.+\@)" {
set token $expect_out(1,string)
send_user "**Get the token $token **\n"}
timeout {
send_user "** Session timeout upon getting token**"
exit -1}
}
Now, this works fine for the previously failed switches.Any help that i How can I handle both the cases?