bați și te aștepți în același scenariu?

Încerc să codez un script care ia adrese IP dintr-un fișier .csv și telnetează dispozitivul pentru a prinde ieșirea comenzii „show version”.

Până acum am codificat acest lucru:

#!/bin/bash #!/usr/bin/expect -f FILE1=dispositivos.csv #file with IP"s and device name set Username "user" #this is the user for telnet connection. set Password "this.is.the.pass" #pass for telnet connection. NUMERODISP="$(wc -l $FILE1 | awk "{print $1}")" #this command counts number of devices (IP"s) in the file as it is a .csv file, it only counts number of lines. for i in `seq 2 $NUMERODISP`; do IP="$(awk -vnum="$i" "NR == num { print $NF }" dispositivoss.csv)" echo "$IP" #this takes the IP from last column from .csv file done 

Am nevoie să completez bucla for, astfel încât să se conecteze prin telnet la IP-ul stocat la $ IP și salvați rezultatul „arată versiunea”.

Am încercat cu acest lucru:

for i in `seq 2 $NUMERODISP`; do IP="$(awk -vnum="$i" "NR == num { print $NF }" dispositivoss.csv)" send "telnet $IP\r" expect "Username:" send "$Username\r" expect "Password: " send "$Password\r" expect "*>" send "show version\r" log_file -noappend SN_$IP.dat; expect -ex "--More--" {send -- " "; exp_continue} expect "*>" log_file; done 

dar nu a funcționat.

Este această cauză, nu pot folosi bash și aștept?

În cazul în care acesta este motivul .. cum pot trimite $ IP și $ NUMDISP ca variabilă într-un alt script expect? de aceea cred că este diferit de cealaltă întrebare)

Comentarii

Răspuns

#!/bin/bash #!/usr/bin/expect -f 

Umm … nu.

Practic doriți atât pentru programe pentru a vă citi scriptul și pentru a „face ceea ce trebuie” cu privire la fiecare linie. În afară de problemele dintre sincronizarea executării scriptului între interpreți, este ușor de văzut că acest lucru este imposibil în momentul în care avem o linie care ar putea fi o comandă validă în oricare dintre limbi. exemplul dvs.

set Username "user" 

De fapt, este valabil atât în shell, cât și într-un script expect. În shell, setează parametrii de poziție $1 și $2 la Username și user, respectiv. În expect atribuie altceva. Pe care ar trebui să o facă?

Fie împărțiți scriptul dvs. expect într-un fișier diferit și apelați-l din scriptul shell, fie folosiți faptul că Expect rulează pe TCL, care ar trebui să permită efectuarea de bucle și IO în sine.


Din fericire, în acest caz, există doar un fragment de așteptare conținut într-o buclă de shell din al doilea bloc de cod.

Deci, creați un script de shell

#!/bin/bash for i in `seq 2 $NUMERODISP`; do IP="$(...)" expect -f somename.expect $IP done 

și un script de asteptare va apela din scriptul shell:

#!/usr/bin/expect -f set IP [lindex $argv 0]; spawn telnet $IP expect "Username:" send "$Username\r" ... 

Comentarii

  • @cesar, există modalități de a pune un script expect într-un script shell, dar există întotdeauna dureri de cap în jurul citatelor și variabilelor. Acesta este cel mai curat mod.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *