Estoy tratando de codificar una secuencia de comandos que tome direcciones IP de un archivo .csv y haga telnet al dispositivo para capturar la salida del comando "show version".
Hasta ahora he codificado esto:
#!/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
Necesito completar el bucle for para que se conecte a través de telnet a la IP almacenada en $ IP y guarde la salida "show version".
He intentado con esto:
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
Pero no funcionó.
¿Es por esto que no puedo usar bash y esperar?
En caso de que esa sea la razón ... ¿cómo puedo enviar $ IP y $ NUMDISP como variable a un script de espera diferente? (Por eso creo que es diferente a la otra pregunta)
bash
shell-script
scripting
expect
Cesar Alejandro Villegas Yepez
fuente
fuente
expect
puede leer un archivo CSV, como lo mostré en unix.stackexchange.com/questions/350338/…Respuestas:
Umm no.
Básicamente, desea que ambos programas lean su script y "hagan lo correcto" con respecto a cada línea. Además de los problemas entre sincronizar la ejecución del script entre los intérpretes, es fácil ver que esto es imposible en el momento en que tenemos una línea que podría ser un comando válido en cualquier idioma.
Considere algo como esto en su ejemplo.
En realidad, es válido tanto en el shell como en un script de esperar. En el shell, establece los parámetros posicionales
$1
y$2
aUsername
yuser
, respectivamente. Enexpect
ella se asigna algo más. ¿Cuál debería hacer?Divida su script de espera en un archivo diferente y llámelo desde el script de shell, o use el hecho de que Expect se ejecuta en TCL, lo que debería permitir hacer bucles e IO en sí mismo.
Afortunadamente en este caso, solo hay un fragmento esperado contenido dentro de un bucle de shell en su segundo bloque de código.
Entonces, crea un script de shell
y un script de espera para llamar desde el script de shell:
fuente