脚本新手,要小心......
我正在尝试使用这个代码,我通过阅读几个博客来整理这些代码。我的想法是让这个脚本读取我在ips.txt上保存的IP,然后使用给定的凭据运行代码到ssh到读取IP,执行如下所述的几个发送命令,退出ssh会话,然后重复使用ips.txt文件中的第二行,这是一个不同的IP,直到它完成IP列表。
注意:ips.txt文件是一个简单的IP地址列表,如下所示(IP之间没有空格):
192.168.0.2
192.168.0.3
192.168.0.4
...
spawn,expect和send命令工作正常。它也可以循环回到代码的开头,但它不会读取ips.txt文件中的第二个IP;它将再次读取第一个并反复执行相同的步骤。
请协助......
date_range
答案 0 :(得分:2)
让我们尝试将代码简化为最低限度地再现问题的东西。你说循环重复使用相同的ip值,对吧?因此,让我们删除与远程系统交互的代码:
#!/usr/bin/expect
set fildes [open "ips.txt" r]
set ip [gets $fildes]
while {[string length $ip] != 1} {
puts $ip
set ip [gets $fildes]
}
close $fildes
运行时会发生什么?
我希望永远不会满足while
条件:您将读取文件,打印每一行,然后打印无限数量的空白行。当您读取文件的最后一行时,您会得到空字符串,而不是长度为1的字符串。
你很可能想要
#!/usr/bin/expect
set timeout 180
set username admin
set password Changeme1
set fildes [open "ips.txt" r]
# the 2-argument form of `gets` returns -1 when it can't read another line
while {[gets $filedes ip] != -1} {
spawn ssh $username@$ip
expect "password:"
send "$password\r"
expect ".mi"
send "show sw\r"
expect ".mi"
send "exit\r"
expect eof ;# wait for the connection to close
}
close $fildes