Форум Gatchina OnLine  

Вернуться   Форум Gatchina OnLine > Hard&Soft > Программирование и разработка

Программирование и разработка Обсуждение вопросов программирования

 
 
Опции темы Опции просмотра
Старый 22.05.2011, 15:34   #1
TNT
Кот - обормот
 
Аватар для TNT
 
Регистрация: 24.01.2006
Адрес: Въездъ

Нарушения:[Посмотреть]
Скрипт на баше

Нужно написать скрипт на bash/ksh. Нужно вывести все системы, имеющие IP адрес в подсетях исходной системы и отвечающие на ARP запросы, потом вывести информацию об использовании дискового пространства локальных файловых систем.

Т.к. я хреново это все знаю, то намутил кучу и уже запутался.
Просьба не обращать внимания на кучу лишних переменных, знаю, что убрать можно много.
Код:
#! /usr/bin/ksh

#подсчет количества подсетей
netcount=`ifconfig -a | sed -n $q"p" | awk '{if($5=="broadcast") print $2}' | wc -l`


i=1

while [ $i -le $netcount ]
do

#выборка маски
ifconfig -a | awk '{if($5=="broadcast") print $4}' | tr '[a-f]' '[A-F]' | read a
echo "ibase=16;$a"|bc | read mask

#выборка адреса подсети
ifconfig -a |  awk '{if($5=="broadcast") print $2}' | read NET
net=`echo $NET`
n1=`echo $net | awk -F"." '{print $1}'`
n2=`echo $net | awk -F"." '{print $2}'`
n3=`echo $net | awk -F"." '{print $3}'`
n4=`echo $net | awk -F"." '{print $4}'`
net=`expr $n1 \* 16777216 + $n2 \* 65536 + $n3 \* 256 + $n4`

#расчет последнего адреса в сети, то же самое, что 2^32-1
max=`expr 255 \* 16777216 + 255 \* 65536 + 255 \* 256 + 255`

#расчет количества хостов
host=`expr $max - $mask`


#подсчет первого адреса в подсети: адрес бродкаста минус количество хостов
ifconfig -a | sed -n $q"p" | awk '{if($5=="broadcast") print $6}' | read startip

n1=`echo $startip | awk -F"." '{print $1}'`
n2=`echo $startip | awk -F"." '{print $2}'`
n3=`echo $startip | awk -F"." '{print $3}'`
n4=`echo $startip | awk -F"." '{print $4}'`

startip=`expr $n1 \* 16777216 + $n2 \* 65536 + $n3 \* 256 + $n4`

start=`expr $startip - $host`


end=`expr $net + $host - 1`


j=$start
while [ $j -le $end ]
 do
 a1=`expr $j / 16777216`
 r=`expr $j % 16777216`
 a2=`expr $r / 65536`
 r=`expr $r % 65536`
 a3=`expr $r / 256`
 a4=`expr $r % 256`

#обновление ARP таблицы
 echo "ping $a1.$a2.$a3.$a4 ..."

arp $a1.$a2.$a3.$a4 >>log
if [ $? -eq 0 ]
then
echo "Disk space of local filesystems on $a1.$a2.$a3.$a4:"
rsh $j df -l
fi
j=`expr $j + 1`
done
i=`expr $i + 1`
done
Вот перебор по подсетям я и не вкупаю как сделать. Моя куча-мала три раза перебирает первую подсеть и все.
100 пудов это все пишется, конечно, гораздо короче и менее запутано. Если кто подскажет - буду очень признательный.
__________________
Use the downforce, Luke!
TNT вне форума   Ответить с цитированием
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:13. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot