Saya mencoba kode skrip yang mengambil alamat IP dari file .csv dan telnet perangkat untuk menangkap output "show version" perintah.
Sejauh ini saya telah mengode ini:
#!/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
Saya perlu menyelesaikan loop for sehingga terhubung melalui telnet ke IP yang disimpan di $ IP dan menyimpan output "show version".
Saya sudah mencoba ini:
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
tapi itu tidak berhasil.
Apakah ini penyebab saya tidak dapat menggunakan bash dan mengharapkan?
Jika itu alasannya .. bagaimana saya bisa mengirim $ IP dan $ NUMDISP sebagai variabel ke skrip harapan yang berbeda? (ini sebabnya saya pikir ini berbeda dari pertanyaan lain)
bash
shell-script
scripting
expect
Cesar Alejandro Villegas Yepez
sumber
sumber
expect
dapat membaca file CSV, seperti yang saya perlihatkan di unix.stackexchange.com/questions/350338/…Jawaban:
Umm ... tidak.
Pada dasarnya Anda ingin kedua program membaca skrip Anda, dan "melakukan hal yang benar" mengenai setiap baris. Terlepas dari masalah antara sinkronisasi eksekusi skrip antara penerjemah, mudah untuk melihat ini tidak mungkin saat kita memiliki garis yang bisa menjadi perintah yang valid dalam bahasa apa pun.
Pertimbangkan sesuatu seperti ini dalam contoh Anda.
Ini sebenarnya valid di shell dan di script yang diharapkan. Di shell, ia menetapkan parameter posisi
$1
dan$2
untukUsername
danuser
masing-masing. Diexpect
dalamnya menetapkan sesuatu yang lain. Yang mana yang harus dilakukan?Pisahkan skrip harapan Anda ke file yang berbeda dan panggil dari skrip shell, atau gunakan fakta bahwa Harapkan berjalan pada TCL yang seharusnya memungkinkan melakukan loop dan IO sendiri.
Untungnya dalam kasus ini, hanya ada cuplikan harapan yang terkandung dalam lingkaran shell di blok kode kedua Anda.
Jadi, buat skrip shell
dan skrip harapan untuk dipanggil dari skrip shell:
sumber