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

Проблемы с for

Добавлено: 2008-05-30 17:06:12
NeonSunlight
Добрый день.
Пишу скрипт, который мог бы перечитывать dhcp.conf и набивать статическими арпами таблицу.
Может конечно и ламерский вопрос, но что-то у меня не выходит с конструкцие for. Вот примерно так:

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

for s in `cat /etc/dhcpd.conf | grep host | grep -v "\#" | awk '{print \$2, \$6}'`
  do
  echo IP = $s
  done
на выходе получаю такое:
IP = host0
IP = 00:0d:93:9d:5c:13;
IP = host1
IP = 00:02:44:aa:c6:0f;
IP = host2
IP = 00:18:f8:ad:98:5d;
На входе в for должны быть строки вида "ip mac", а получается 2 строки с ip и mac.
т.е. for читает вход как массив, или я что-то не понимаю?
Заранее спасибо!

Re: Проблемы с for

Добавлено: 2008-05-30 17:39:39
Alex Keda
по пробелам делит

Re: Проблемы с for

Добавлено: 2008-05-30 18:01:44
NeonSunlight
Спасибо! Тогда логично предположить, что стоит их заменить на табуляцию, например, sed'ом, только как - непонятно... Символ табуляции я не знаю где найти. Или может быть поправить разделитель в первом awk'е ?

Re: Проблемы с for

Добавлено: 2008-05-30 20:46:00
Alex Keda
поделит по табам.
пустой символ - и всё. по нему и делит

Re: Проблемы с for

Добавлено: 2008-05-30 21:25:52
NeonSunlight
Сделал по-индийски, но все таки сделал. Может кому-то еще мой опыт будет полезен. Вот:

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

#!/bin/sh
arp -ad
for s in `cat /etc/dhcpd.conf | grep host | grep -v "\#" | awk '{printf "%s_%s\n", \$2, \$6}' | sed 's/;//g'`
  do
  ip=`echo $s | sed 's/_/ /g' | awk '{print $1}'`
  mac=`echo $s | sed 's/_/ /g' | awk '{print $2}'`
  arp -s $ip $mac 
  done

Re: Проблемы с for

Добавлено: 2008-05-31 7:29:25
zg
у меня есть подозрение, что можно обойтись только awk, можешь выложить пример того, что у тебя в /etc/dhcpd.conf лежит

Re: Проблемы с for

Добавлено: 2008-06-01 12:53:47
NeonSunlight
Там лежат такие конструкции, просто описываются статические привязки для dhcp:

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

host wifi1 { hardware ethernet 00:18:f8:ad:98:5d; fixed-address wifi1.host.ru; }
#host wifi2 { hardware ethernet 00:18:f8:ad:98:6c; fixed-address wifi2.host.ru; }
host wifi3 { hardware ethernet 00:18:f8:ad:9b:5e; fixed-address wifi3.host.ru; }
host wifi4 { hardware ethernet 00:13:46:98:17:df; fixed-address wifi4.host.ru; }

Re: Проблемы с for

Добавлено: 2008-06-01 13:19:03
zg

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

game# cat 1.sh
#!/bin/sh

awk '{if(match($0,"^[^#]"))print $1, substr($6,1,17)}' 1.txt | {
  while read ip mac
  do
    echo -e "IP=$ip\tMAC=$mac"
  done
}

game# ./1.sh
IP=host MAC=00:18:f8:ad:98:5d
IP=host MAC=00:18:f8:ad:9b:5e
IP=host MAC=00:13:46:98:17:df
game# cat 1.txt
host wifi1 { hardware ethernet 00:18:f8:ad:98:5d; fixed-address wifi1.host.ru; }
#host wifi2 { hardware ethernet 00:18:f8:ad:98:6c; fixed-address wifi2.host.ru; }
host wifi3 { hardware ethernet 00:18:f8:ad:9b:5e; fixed-address wifi3.host.ru; }
host wifi4 { hardware ethernet 00:13:46:98:17:df; fixed-address wifi4.host.ru; }
я только не понял, в каком поле у тебя ипы лежат.. ну если чё то править надо $1

Re: Проблемы с for

Добавлено: 2008-06-01 13:34:23
NeonSunlight
Спасибо огромное! Ипы берутся из named, т.е. это по сути wifi1.host.ru, wifi2.host.ru и т.д.

Re: Проблемы с for

Добавлено: 2008-06-08 17:22:55
krilya
подскажите плиз как на shell сделать такой цикл?

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

for i=1 to 10
next i

Re: Проблемы с for

Добавлено: 2008-06-08 17:32:19
NeonSunlight

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

for i in `seq2 -s 1 -e 10`
  do
  ...
  done
только seq2 потребуется дополнительно установить из портов.

Re: Проблемы с for

Добавлено: 2008-06-08 17:43:35
krilya
спасибо, а для чего нужна тулза из портов? неужели штатными средствами нельзя сделать?

Re: Проблемы с for

Добавлено: 2008-06-08 19:28:27
zg
krilya писал(а):а для чего нужна тулза из портов?
а чтоб значения ручками не вводить, но у неё вроде есть какой-то аналог, который последовательности генерит, уже не помню.. надо искать
krilya писал(а): неужели штатными средствами нельзя сделать?
смотря что конкретно тебе надо? если цикл, то тут лучше использовать while, если конкретно for тогда лучше почитать учебники на тему циклов.

Re: Проблемы с for

Добавлено: 2008-06-09 2:50:37
NeonSunlight
krilya писал(а):спасибо, а для чего нужна тулза из портов? неужели штатными средствами нельзя сделать?
Как вариант - сделать через while и инкрементить счётчик в теле цикла.