2013-12-12 120 views
1

我想在循環中運行此腳本。bash/expect/loop - 如何循環執行telnet的簡單bash腳本

什麼是需要做的是閱讀的文件在這樣的文件中的IP地址:

10.0.0.0 
10.0.0.1 
10.0.0.2 
10.0.0.3 
10.0.0.4 

並運行上述這裏列出的每個IP這個腳本。

這是我有:

#!/usr/bin/expect 

spawn telnet 10.0.0.0 
expect "User Name :" 
send "username\r" 

expect "Password :" 
send "password\r" 
expect ">" 
send "4\r" 
expect "*#" 
exit 

我如何獲得上述一個txt文件工作的每一個IP的腳本。

回答

3

你可以閱讀您期望的腳本中的文件。

打開文件並將文件描述符分配給變量,讀取每行並執行您編寫的上述代碼。

set fildes [open "myhosts.txt" r] 
set ip [gets $fildes] 
while {[string length $ip] > 0} { 

    spawn telnet $ip 
    expect "User Name :" 
    send "username\r" 

    expect "Password :" 
    send "password\r" 
    expect ">" 
    send "4\r" 
    expect "*#" 
    exit 
    set ip [gets $fildes] 
} 
close $fildes 
+0

這些腳本很好用!但它只使用myhosts.txt中的第一個IP,並且它不使用myhosts.txt中第一行下的ip。 但是登錄正在工作 – Mitchel

+0

對不起,它有效,我有那個刪除的退出:D 謝謝非常多:) – Mitchel

+0

它退出,因爲我繼承了你的輸入錯誤。表示退出的行應該發送「exit \ r」,因爲該行的意圖是告訴生成的telnet退出。但是,錯字錯誤正在告訴腳本退出。 – alvits

2

我不是expect的專家,但您需要做的第一件事就是將您期望的腳本更改爲接受參數。它應該像這樣(看起來你在#!/usr/bin/expect需要-f):

#!/usr/bin/expect -f 

set ip [lindex $argv 0] 
spawn telnet $ip 
... 

然後,你可以簡單地遍歷您的IP列表中你的bash腳本:

while read ip ; do 
    myExpectScript $ip 
done < list_of_ip.txt 
+0

我不能得到它的工作DarkDust ... – Mitchel

+0

你能更具體嗎?哪一部分?你得到什麼錯誤信息? – DarkDust

2

這只是對@ user3088572的回答。逐行讀取文件的慣用方法是:

set fildes [open "myhosts.txt" r] 
while {[gets $fildes ip] != -1} { 
    # do something with $ip 
} 
close $fildes