1

私は期待するのが初めてで、ロジックを使用して、ユーザーがログインし、他の回線をそのままにしておくtelnetセッションの切断を自動化していました。

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

すべての回線を切断します

今は「showuser」コマンドを使用していますが、その周りにスクリプトを書くのは難しいです。出力は私にとって十分にフレンドリーではありません。したがって、このforループにIFステートメントを記述しましたが、これは適切ではなく、ここに含める価値さえありませんでした。 。出力結果の文字列を一致させる方法と、文字列に基づいて行をクリアするかどうかを決定する方法を誰かに教えてもらえますか?

4

1 に答える 1

2

これは、アルゴリズムの興味深いスピンです...すべての行を反復処理する際に現在発生している問題は、記述されたスクリプトが、行の1つに表示されるだけで終了することです...

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

が表示された場合は% Not allowed、スクリプトを終了する代わりに、この行をバイパスして次の行に移動してください...

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
于 2012-05-09T21:47:06.280 に答える