Страница 1 из 1

Проктологическое Shell-программирование

Добавлено: 2009-11-23 16:30:06
vadim64
да простая задача: получить вывод типа
Interface eth0: 192.168.1.254 active
Interface eth1: 192.168.1.253 active
Interface eth2: 192.168.1.252 active.
Предполагаемый путь решения: Получить список интерфейсов(ifconfig -l). Потом получить их количество(ifconfig -l | wc -w). Потом сказать awk, чтобы он сказал своему рабу printf столько раз, сколько интерфейсов(ifconfig -l | wc -w), напечатать сведения о том на каком интерфейсе какой адрес. При этом printf вызывал бы команду типа

Код: Выделить всё

ifconfig *название интерфейса, полученое путём получения i-ого элемента из списка интерфейсов, полученого от команды ifconfig -l, причём i увеличивается от 1 до числа интерфейсов, а число получено из этогоже списка, путём определения числа слов в списке(ifconfig -l | wc -w)*

Re: Проктологическое Shell-программирование

Добавлено: 2009-11-23 17:57:51
zg

Код: Выделить всё

%./2.sh
Interface fxp0: 192.168.33.1 active
Interface rl0: чч.чч.чч.чч active

Код: Выделить всё

%cat 2.sh
#!/bin/sh

ifconfig | awk '{
  if ( match($1, "[a-z]+[0-9]:") ) ether  = $1;
  if ( $1 == "inet" ) inet = $2;
  if ( $1 == "status:" )
  {
     status = $2;
     print "Interface "ether" "inet" "status;
  }
}'

Re: Проктологическое Shell-программирование

Добавлено: 2009-11-24 8:33:55
vadim64
Нееее... По принципу сортировки и выборки по шаблону эт не в счёт. Эт и я так вон могу

Код: Выделить всё

ifconfig | grep -v 127.0.0.1 | grep -v lo | awk '/flags/ {printf "Interface "$1" "} /inet/ {printf $2" "} /status/ {printf $2"\n"}'
Задача именно чтоб скрипт получал список интерфейсов

Код: Выделить всё

ifconfig -l
, а потом брал их из списка и интересующие нас сведения получал из команды

Код: Выделить всё

ifconfig *i-ый интерфейс*
причём i меняется от 1 до количества интерфейсов, которое получаем из

Код: Выделить всё

ifconfig -l | wc -w
В принципе всё просто, единственный вопрос как давать printf аргумент, являющийся выводом команды, которая сформирована динамически.

Re: Проктологическое Shell-программирование

Добавлено: 2009-11-30 11:44:45
GRooVE

Код: Выделить всё

# ./test.sh
Interface em0: 192.168.0.1 is active
Interface em1: 192.168.254.1 is no carrier
Interface rl0: 10.8.27.35 is active

Код: Выделить всё

#!/bin/sh

str=`ifconfig -l`

i=1
while [ $i -le "`echo "$str" | wc -w`" ];
do
iface=`echo $str | cut -d " " -f $i`
echo "Interface $iface: `ifconfig $iface | grep inet | cut -d " " -f 2` is \
`ifconfig $iface | grep status | cut -d " " -f 2,3`"
i=$((i+1))
done