bash és ugyanabban a forgatókönyvben várhat?

Olyan szkriptet próbálok kódolni, amely egy .csv fájl IP-címét veszi fel, és az eszközt telnet segítségével elkapja a “show version” parancs kimenetét.

Eddig ezt kódoltam:

#!/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 

Ki kell töltenem a for ciklust, hogy telneten keresztül csatlakozzon a $ IP címen tárolt IP-hez és mentse a “show version” kimenetet.

Próbáltam ezzel:

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 

de nem működött.

Ez az oka annak, hogy nem tudom használni a bash-t és a várakozást?

Ha ez az oka .. hogyan küldhetem a $ IP és a $ NUMDISP-t változóként egy másik várakozási szkriptbe? ezért gondolom, hogy ez más, mint a másik kérdés)

Megjegyzések

Válasz

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

Umm … nem.

Alapvetően mindkét programokat olvasni a szkriptet, és minden sorban “helyesen cselekedni”. A szkript végrehajtásának tolmácsok közötti szinkronizálása közötti problémákon kívül könnyen belátható, hogy ez lehetetlen abban a pillanatban, amikor van egy olyan sorunk, amely bármelyik nyelven érvényes parancs lehet.

Fontoljon meg ilyesmit a a te példád.

set Username "user" 

Ez valójában érvényes a shellben és az várakozási szkriptben is. A héjban a $1 és $2 Username és user. A expect szakaszban mást rendel hozzá. Melyiket tegye?

Vagy ossza fel az várt parancsfájlt egy másik fájlra, és hívja meg a shell parancsfájlból, vagy használja azt a tényt, hogy az Expect TCL-n fut, aminek lehetővé kell tennie a ciklusok és az IO önmagában történő végrehajtását. / p>


Ebben az esetben szerencsére csak egy várható kódrészlet található a második kódblokk héjkörében.

Tehát készítsen shell parancsfájlt

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

és egy várható szkript, amelyet a shell parancsfájlból kell meghívni:

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

Megjegyzések

  • @cesar, van mód arra, hogy egy várakozó szkriptet egy shell szkriptbe helyezzen, de az idézetek és a változók körül mindig fáj a fej. Ez a legtisztább módszer.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük