2013-03-10 8 views
2
#! /bin/expect 
set timeout 20 
set user [lindex $argv 0] 
set password [lindex $argv 1] 
set prompt "$ " ;# -- main activity 
proc dostuff { currenthost} {  
;# do something with currenthost  
send -- "ls -lrt\r" return} ;# -- start of task 

set fd [open ./hostlist r] 
set hosts [read -nonewline $fd] 
close $fd 

foreach host [split $hosts "\n" ] {  
spawn /usr/bin/ssh [email protected]$host  
    while (1) {   
    expect { 
     "no)? " {    
     send -- "yes\r"   
    }     
    "password: " {    
     send -- "$password\r"   
    }     
    "$prompt" {    
     dostuff { $host }    
     break   
    }  
    }  
    } 

expect "$prompt" 
send -- "exit\r" 
} 
expect eof 

Я просмотрел this кода в Интернете, но он будет считывать данные, если он arragnged в 2 колонки, как.как я могу прочитать данные из файла в сценарий ожидать

HOST TFTP_SERVER_ADDRESS 
xx  XXYY 
aa  AABB 
... ... 
... .... 

и так далее

Я хотел бы назначить каждому TFTP_SERVER_ADDRESS переменной и использовать его в моем сценарии.

Кроме того, эта часть кода безопасного:

# grab the password 
stty -echo 
send_user -- "Password for [email protected]$host: " 
expect_user -re "(.*)\n" 
send_user "\n" 
stty echo 
set pass $expect_out(1,string) 

#... later 
send -- "$pass\r" 

ответ

4

Пример сценарий, который считывает данные из файла, а затем называет ожидать сценарий.

ChangePassword.sh

while read line 
do 
    pin=`echo $line | awk -F'|' '{print $1}'` 
    ipaddress=`echo $line | awk -F'|' '{print $2}'` 
    password=`echo $line | awk -F'|' '{print $3}'` 
    #echo "$pin -- $password -- $ipaddress" 
    echo "./t.expect $ipaddress $pin \"$password\" " 
done<pin_password_8_192series.csv 

t.expect

#!/usr/bin/expect -f 
set timeout 20 
set IPaddress [lindex $argv 0] 
set PIN [lindex $argv 1] 
set PASSWORD [lindex $argv 2] 

spawn telnet $IPaddress 
expect "localhost login:" 
send "root\r" 
expect "Password:" 
send "root\r" 
send "cd /mnt/sip\r" 
send "sed -i 's/Password=\"$PIN\"/Password=\"$PASSWORD\"/g' Config.xml\r" 
send "reboot\r" 
send "exit\r" 
interact 

pin_password_8_192series.csv

341|192.168.6.1|&<M11qqHVkDdBj2 
342|192.168.6.3|gyo8rB-9C<Ok.;= 
343|192.168.6.6|skFI)4S-O.&-y,i 
344|192.168.6.8|+Fqp6z*qEtQN0s? 
+0

Да спасибо !! Идеально! – Jey10

Смежные вопросы