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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

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

Непрочитанное сообщение vadim64 » 2009-11-23 16:30:06

да простая задача: получить вывод типа
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)*
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-11-23 17:57:51

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

%./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;
  }
}'

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

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

Непрочитанное сообщение vadim64 » 2009-11-24 8:33:55

Нееее... По принципу сортировки и выборки по шаблону эт не в счёт. Эт и я так вон могу

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

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 аргумент, являющийся выводом команды, которая сформирована динамически.
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
GRooVE
ст. сержант
Сообщения: 309
Зарегистрирован: 2009-01-04 10:33:43
Откуда: Odessa, UA
Контактная информация:

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

Непрочитанное сообщение GRooVE » 2009-11-30 11:44:45

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

# ./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