Всем привет.
В скриптописании практически полный нуль.
Хотел бы попросить помощи знающих.
Есть скрипт, который собирает мак адреса на сетевом оборудовании.
После того, как он собрал, он в качестве параметра передает мак скрипту ssh_arp.sh,
который в свою очередь смотрит в arp табл серверов и находит соответствующий маку ip адрес.
Казалось бы, что может быть проще:) вот пример скрипта:
#!/bin/bash
mac=$1
serv=(10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4)
for ((i=0; i<=4; i++))
do
rez=$(ssh vasya@${serv[$i]} "arp -a | grep $mac")
ip=$(echo $rez |sed 's/(//;s/)//'| awk '{print $2}')
mac_cl=$(echo $rez |sed 's/(//;s/)//'| awk '{print $4}')
if [ -n "$rez" ]; then
echo "$ip $mac_cl"
fi
done
т.е он получает параметром мак и ищет его на каждом сервере поочереди.
выполняется крайне долго...
Написал аналогичный на скрипт perl, в надежде на ускорение процесса:
#!/usr/bin/perl -w
#$ARGV[0] mac адрес
use Net::OpenSSH;
@vpnserv=("10.0.0.1", "10.0.0.2", "10.0.0.3", "10.0.0.4");
for ($i=0; $i<=4; $i++)
{
my $user = 'vasya';
my $ssh = Net::OpenSSH->new(host => $serv[$i], user => $user, port => 22);
$ssh->error and die "SSH connection failed: " . $ssh->error;
my $rv = $ssh->system("arp -a | grep $ARGV[0]");
if ($? != 0) {
print "Данные отсутсвуют";
}
}
В сравнении с bash скриптом perl овый выполняется с такой же скоростью.
Скрипты явно не заслуживают похвал :), но я только начал...
В общем прошу помощи либо в оптимизации данного решения, либо предложите другое решение, которое будет работать быстрее моего.
По поводу того, насколько медленно выполняется... поиск 40 маков занимает порядка 7 минут. Т.к. маки могут быть на разных серверах.