2011-10-17 160 views
6

我一直在試圖建立一個期望腳本如果有對期望的命令沒有多種可能性通過telnet期待腳本來自動telnet登錄

自動登錄到我的設備,腳本工作正常,登錄到設備。

#!/usr/bin/expect 
set timeout 20 
set ip [lindex $argv 0] 
set port [lindex $argv 1] 
set user [lindex $argv 2] 
set password [lindex $argv 3] 

spawn telnet $ip $port 
expect "'^]'." sleep .1; 
send "\r"; 
sleep .1; 
expect "login:" 
send "$user\r" 
expect "Password:" 
send "$password\r"; 
interact 

上面的腳本正常工作,併成功登錄時,我傳遞正確的參數。但是,一旦我添加額外的分支(用於錯誤處理)到期望命令,腳本卡住login:提示。一段時間後,它打印Script Error 任何幫助?下面的錯誤腳本。

#!/usr/bin/expect 
set timeout 20 
set ip [lindex $argv 0] 
set port [lindex $argv 1] 
set user [lindex $argv 2] 
set password [lindex $argv 3] 

spawn telnet $ip $port 
expect "'^]'." 
sleep .1; 
send "\r"; 
expect 
{ 
    "login:" 
    { 
     send "$user\r" 
     expect "Password:" 
     send "$password\r"; 
     interact 

    } 

    "host: Connection refused" 
    { 
    send_user "ERROR:EXITING!" 
    exit 
    } 

} 

PS:該腳本將被進一步發展,以等待附加提示在裝置上加載不同的構建圖像。只有telnet(控制檯)連接有效。所以ssh不是一個選項。

+0

小心分享一次登錄後如何傳遞附加命令?我無法通過這個障礙:http://stackoverflow.com/questions/11148832/shell-script-successful-telnet-login-how-to-issue-commands-after-that – TryTryAgain

+1

如果你在談論通過腳本自動執行shell中的其他命令。你應該使用發送命令。交互將球傳遞給用戶。從你張貼的問題,我看到你已經得到了答案。 :)期待贏得.. – woodstok

回答

4

我的不好。 問題在於花括號。他們應該和預期的命令在同一條線上。