2012-05-09 223 views
1

我新的希望和我使用的是邏輯自動diconnecting其中用戶登錄Telnet會話,並保留其他行,因爲它是:Expect腳本問題

for {set i 0} {$i ==4} {incr i} { 
send "clear line vty $i\r" 
"confirm]" {send "\r"} 
"% Not allowed" {send "quit\r"; exit} 
} 

它斷開所有行

現在我使用「顯示用戶」命令,但我很難寫出一個腳本,輸出對我來說不夠友好,所以我在這個循環中編寫了IF語句,但它並不好,甚至不值得包含這裏。請有人可以引導我,以便如何匹配輸出結果中的字符串,並根據字符串決定是否清除行

回答

2

這是一個有趣的旋轉算法......你現在遇到的問題通過所有行迭代是,如果你看到% Not allowed,簡單地繞過這條線,並移動到下一個爲編寫腳本會,如果它僅僅是把自己的線的一個出口,

for {set i 0} {$i == 4} {incr i} { 
send "clear line vty $i\r" 
"confirm]" {send "\r"} 
"% Not allowed" {send "quit\r"; exit} 
} 

,而不是退出劇本...

for {set i 0} {$i < 4} {incr i} { 
    send "clear line vty $i\r" 
    expect { 
     "confirm]" { send "\r"; expect "*#" } 
     "% Not allowed" { send "! refusing to clear line vty $i\r"; expect "*#" } 
    } 
} 

的Cisco IOS認爲行是註釋,如果它開始!


在下面的腳本日誌,並清除除了劇本上......這個運行在我的實驗室細運行線路的所有線路。

#!/usr/bin/expect -f 

spawn telnet 172.16.1.5 
set user [lindex $argv 0] 
set pass [lindex $argv 1] 

expect "Username: " 
send "$user\r" 
expect "assword: " 
send "$pass\r" 
expect ">" 
send "enable\r" 
expect "assword: " 
send "$pass\r" 
expect "*#" 
for {set i 0} {$i < 5} {incr i} { 
    send "clear line vty $i\r" 
    expect { 
      "confirm]" { send "\r"; expect "*#" } 
      "% Not allowed" { send "! refusing to clear line vty $i\r"; expect "*#" } 
    } 
} 
exit 
+0

我無法理解期望{}做什麼?它會帶來一堆期待嗎? – RAY

+0

這是一種告訴期待尋找一對夫婦的答案 –

+0

確定很好,另一件事...我正在運行一個期望的腳本來運行一個命令來檢查實驗室使用10分鐘後tty線佔用「sh line tty 1 sum」,然後匹配字符串...是否有可能如果他們是沒有人在線我可以以某種方式返回一個值在我的PHP腳本,這樣我可以刪除該用戶的憑據? – RAY