2012-05-18 86 views
2

的腳本命令所以第一關,我會承認自己是很新的期待腳本我一直在玩它約3天。我拿起了O'Reilly的書,正在努力通過它。然而,我對預期流量感到困惑,並希望得到一些指導。預計運營

我在下面的代碼片斷。 if語句的上半部分完美地工作。但是elseif部分不能按預期工作。它執行,只是無序。它首先處理puts線,然後通過發送命令運行。我想知道爲什麼這樣做,以及如何使它按順序執行。

也是另一種好辦法,我想提出的是,當沒有爲$ MD5匹配,我不想等待超時。所以基本上我希望期望$ MD5或任何不是$ MD5的東西,這樣我就不必爲默認的超時而坐。我意識到我可以期待 - 超時1「$ MD5」並縮短窗口,但我想知道是否有一種更優雅的處理方式。

預先感謝您。

expect "$MD5" 
if {$MD5 == $expect_out(0,string)} { 
    send "config t\r"; 
    send "no boot system\r"; 
    send "boot system flash:$IOS\r"; 
    send "exit\r"; 
    send "wr mem\r"; 
    expect "OK"; 
    send "exit\r"; 
    puts -nonewline "\nIOS Upgrade Successful and Bootvar changed.\n" 
    exit 
} elseif {$MD5 != $expect_out(0,string)} { 
    send "delete flash:$IOS\r"; 
    send "\r"; 
    send "\r"; 
    send "exit\r"; 
    puts -nonewline "\nIOS Upgrade FAILED MD5 Hash did not match!\n"; 
    expect eof 
    exit 
} 
+0

感謝您的反應,工作。下面清理代碼: '期望 「$ MD5」 如果{$ MD5 == $ expect_out(0,字符串)} { 發送 「配置牛逼\ R」 發送 「沒有啓動系統\ R」 發送「啓動系統閃光燈:$ IOS \ r「 發送」退出\ r「 發送」wr mem \ r「 預計」OK「 發送」退出\ r「 puts -nonewline」\ nIOS升級成功和Bootvar已更改。\ n 「 退出 }其他{ 發送 」刪除/強制閃光:$ IOS \ R「 發送 」退出\ R「 預期EOF 提出-nonewline 」\ NIOS升級失敗MD5哈希不匹配\ n「!退出 }' – rsaturns

回答

3

預計實際處理send異步,根據衍生應用程序的速度有多快實際上可以接受的數據(也有一些其他的速率限制器太)。爲了讓事情等待,你需要使用expect

解決方法是把expect eofputs(或放東西的expect別的事先,比如你做delete flash:…後得到的提示)。

+0

雖然你可以同時等待多個事情(見[想到手冊頁]例子(http://www.tcl.tk/man/expect5.31/expect.1.html)如何)什麼你不能輕易等待是「任何意想不到的事情」,因爲你太容易得到錯誤的匹配(例如,從你想要的_prefix_中獲得)。 –