как я могу прочитать данные из файла в сценарии ожидания

#! /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 $user@$host       
  while (1) {         
    expect { 
        "no)? " {            
        send -- "yes\r"        
    }                  
    "password: " {             
        send -- "$password\r"        
    }                   
    "$prompt" {            
        dostuff { $host }            
        break        
    }       
     }    
  } 

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

Я просмотрел этот код в Интернете, но будет ли он читать данные, если они расположены в 2 столбцах, например .

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

и так далее

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

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

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

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

person munish    schedule 10.03.2013    source источник


Ответы (1)


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

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

т. ожидать

#!/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?
person user1263746    schedule 10.03.2013