Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как оформить массив?  (Прочитано 933 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Druge

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Как оформить массив?
« : 25 Апреля 2010, 19:43:30 »
При настройки локальной сети решил привязать IP адреса к MAC адресам сетевых карточек:

# Формат - [номер_в_массиве]="<ip_клиента> <mac_клиента>"

LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:5С"
[2]="192.168.0.6 00:0D:61:11:9D:4В"
[3]="192.168.0.4 00:19:DB:D1:3В:63"
[4]="192.168.0.5 00:0D:61:5E:86:40"
)

Раньше это работало.
Но в версии Ubuntu 9.10 изменился метод оформления массива, в частности программа ругается на скобки.
Подскажите, плиз как это должно выглядеть?

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #1 : 25 Апреля 2010, 20:16:03 »
Ничего не изменилось. Ищи другие ошибки.
mamon@mamon-desktop:~/tmp$ cat ./array
#!/bin/bash
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:5С"
[2]="192.168.0.6 00:0D:61:11:9D:4В"
[3]="192.168.0.4 00:19:DB:D1:3В:63"
[4]="192.168.0.5 00:0D:61:5E:86:40"
)
echo ${LOCAL_IPS[3]}
mamon@mamon-desktop:~/tmp$ ./array
192.168.0.4 00:19:DB:D1:3В:63
mamon@mamon-desktop:~/tmp$ lsb_release -d
Description: Ubuntu 9.10

Оффлайн Druge

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #2 : 25 Апреля 2010, 20:59:43 »
Далее было так:

  # Разрешаем доступ для клиентов указанных в LOCAL_IPS
    # если данная переменная пустая то разрешены все адреса из локальной сети
start_fw()
{  
  if [ "${#LOCAL_IPS[*]}" -ne 0 ]; then
        for i in `seq 1 ${#LOCAL_IPS[*]}`; do
            ip=`echo ${LOCAL_IPS[$i]} | awk '{print $1}'`
            mac=`echo ${LOCAL_IPS[$i]} | awk '{print $2}'`
            if [ -n "$mac" ]; then
                $IPT -A allowip -m mac -s $ip --mac-source $mac -j allowport
            else
                $IPT -A allowip -s $ip -j allowport
            fi
        done
    else
         $IPT -A allowip -s $LOCAL_NET -j allowport
    fi
    # Разрешаем транзитные соединения из локальной сети
    for port in $ALLOWED_PORTS_FW_TCP; do
        $IPT -A allowport -p tcp -m tcp --dport $port -j ACCEPT
    done
}

stop_fw()

Проверьте,  пожалуйста.
« Последнее редактирование: 25 Апреля 2010, 21:11:55 от Druge »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #3 : 25 Апреля 2010, 21:09:28 »
Работает:
mamon@mamon-desktop:~/tmp$ cat ./array
#!/bin/bash
IPT="echo iptables" #echo здесь для дебага
LOCAL_IPS=(
[1]="192.168.0.2 00:01:6C:26:A4:5С"
[2]="192.168.0.6 00:0D:61:11:9D:4В"
[3]="192.168.0.4 00:19:DB:D1:3В:63"
[4]="192.168.0.5 00:0D:61:5E:86:40"
)
# Разрешаем доступ для клиентов указанных в LOCAL_IPS
# если данная переменная пустая то разрешены все адреса из локальной сети
if [ "${#LOCAL_IPS[*]}" -ne 0 ]; then
for i in `seq 1 ${#LOCAL_IPS[*]}`; do
ip=`echo ${LOCAL_IPS[$i]} | awk '{print $1}'`
mac=`echo ${LOCAL_IPS[$i]} | awk '{print $2}'`
if [ -n "$mac" ]; then
$IPT -A allowip -m mac -s $ip --mac-source $mac -j allowport
else
$IPT -A allowip -s $ip -j allowport
fi
done
else
$IPT -A allowip -s $LOCAL_NET -j allowport
fi

mamon@mamon-desktop:~/tmp$ ./array
iptables -A allowip -m mac -s 192.168.0.2 --mac-source 00:01:6C:26:A4:5С -j allowport
iptables -A allowip -m mac -s 192.168.0.6 --mac-source 00:0D:61:11:9D:4В -j allowport
iptables -A allowip -m mac -s 192.168.0.4 --mac-source 00:19:DB:D1:3В:63 -j allowport
iptables -A allowip -m mac -s 192.168.0.5 --mac-source 00:0D:61:5E:86:40 -j allowport

Оффлайн Druge

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #4 : 25 Апреля 2010, 21:16:41 »
Я сейчас добавил полностью код в своём примере.
Там отсутствовало:


start_fw()
{
...........
}
stop_fw()

Может это действительно исключить?
« Последнее редактирование: 25 Апреля 2010, 21:18:25 от Druge »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #5 : 25 Апреля 2010, 21:30:19 »
Скрипт оборванный. Это всё, что есть в файле?

Оффлайн Druge

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #6 : 25 Апреля 2010, 21:35:32 »
Это конечно часть скрипта, не хотелось Вас загружать.
« Последнее редактирование: 25 Апреля 2010, 21:37:46 от Druge »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #7 : 25 Апреля 2010, 21:37:25 »
Важна каждая закорючка, если ошибка не сразу бросается в глаза.

Оффлайн Druge

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #8 : 25 Апреля 2010, 21:56:32 »
Ответил в личные.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #9 : 25 Апреля 2010, 22:06:20 »
Товарищи, знайте, sh и bash различаются. Массивы, как у ТС в первом посте, это расширение bash.

Оффлайн Druge

  • Автор темы
  • Любитель
  • *
  • Сообщений: 96
    • Просмотр профиля
Re: Как оформить массив?
« Ответ #10 : 25 Апреля 2010, 22:16:47 »
Mam(O)n

Огромное спасибо за решение проблемы.

 

Страница сгенерирована за 0.076 секунд. Запросов: 25.