|
Программирование и разработка Обсуждение вопросов программирования |
|
Опции темы | Опции просмотра |
22.05.2011, 15:34 | #1 |
Кот - обормот
|
Скрипт на баше
Нужно написать скрипт на 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! |