J'essaye de coder un script qui prend les adresses IP d'un fichier .csv et telnet le périphérique pour attraper la sortie de la commande "show version".
Jusqu'à présent, j'ai codé ceci:
#!/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
J'ai besoin de compléter la boucle for pour qu'elle se connecte via telnet à l'IP stockée à $ IP et enregistre la sortie "show version".
J'ai essayé avec ça:
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
mais ça n'a pas marché.
Est-ce que je ne peux pas utiliser bash et attendre?
Dans le cas où c'est la raison .. comment puis-je envoyer $ IP et $ NUMDISP en tant que variable dans un script d'attente différent? (c'est pourquoi je pense que c'est différent de l'autre question)
bash
shell-script
scripting
expect
Cesar Alejandro Villegas Yepez
la source
la source
expect
pouvez lire un fichier CSV, comme je l'ai montré dans unix.stackexchange.com/questions/350338/…Réponses:
Umm ... non.
Fondamentalement, vous voulez que les deux programmes lisent votre script et "fassent la bonne chose" concernant chaque ligne. Mis à part les problèmes entre la synchronisation de l'exécution du script entre les interprètes, il est facile de voir que c'est impossible au moment où nous avons une ligne qui pourrait être une commande valide dans l'une ou l'autre langue.
Considérez quelque chose comme ça dans votre exemple.
Il est en fait valide à la fois dans le shell et dans un script attendu. Dans le shell, il définit respectivement les paramètres positionnels
$1
et$2
toUsername
etuser
. Ilexpect
y attribue autre chose. Laquelle devrait-elle faire?Soit divisez votre script expect dans un fichier différent et appelez-le depuis le script shell, ou utilisez le fait qu'Expect s'exécute sur TCL qui devrait permettre de faire des boucles et des E / S en lui-même.
Heureusement dans ce cas, il y a juste un extrait attendu contenu dans une boucle shell dans votre deuxième bloc de code.
Alors, faites un script shell
et un script attendu à appeler à partir du script shell:
la source