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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Bash и массивы  (Прочитано 755 раз)

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

Оффлайн Stibin

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Bash и массивы
« : 31 Март 2016, 19:11:49 »
Здравствуйте.

Есть массив с названиями таблиц (ipt_table). Для каждой таблицы есть массив с цепочками (chain_filter, chain_nat, etc).
Подскажите, как прокрутить для каждой таблицы массив с её цепочками? Ниже, что что успел написать:

#!/bin/bash

ipt_table[1]='filter'
ipt_table[2]='nat'

chain_filter=( [1]=INPUT [2]=OUTPUT [3]=FORWARD )
chain_nat=( [1]=PREROUTING [2]=INPUT [3]=OUTPUT [4]=POSTROUTING )

echo ${chain_filter[@]}

for i in "${!ipt_table[@]}"; do
  echo $i ${ipt_table[$i]}
  chain_name=chain_${ipt_table[$i]}
  echo ${!chain_name[@]}
done

ТС не появлялся на Форуме более полугода по состоянию на 13/07/2019 (последняя явка: 24/05/2016). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 13 Июль 2019, 23:51:22 от zg_nico »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash и массивы
« Ответ #1 : 31 Март 2016, 20:51:01 »
как прокрутить для каждой таблицы массив с её цепочками?
Я понимаю что компьютерный сленг звучит круто, но за гранью понимания осталось что именно Вы хотите сделать и нафига Вам это надо?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн $ $ $

  • Активист
  • *
  • Сообщений: 305
  • ArchLinux
    • Просмотр профиля
Re: Bash и массивы
« Ответ #2 : 31 Март 2016, 20:56:35 »
Azure,
Цитировать
нафига Вам это надо?
домашнее задание может?)

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash и массивы
« Ответ #3 : 31 Март 2016, 21:01:56 »
Если по Вашему
Код: (bash) [Выделить]
for i in "${ipt_table[@]}"; do
    echo ${i}:
    for j in $(eval echo "\${chain_$i[@]}"); do
        echo -e \\t$j
    done
done
Хотя почему не использовать псевдодвумерный массив, пускай даже ассоциативный? Или воспользоваться например awk?
« Последнее редактирование: 31 Март 2016, 21:20:21 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Stibin

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Bash и массивы
« Ответ #4 : 01 Апрель 2016, 14:49:54 »
Хотя почему не использовать псевдодвумерный массив, пускай даже ассоциативный? Или воспользоваться например awk?

Спасибо, это работает! На счет домашнего задания, почти угадали, я изучаю bash, вот и придумал себе такое задание.

И если можно подробнее про псевдодвумерный массив - великий и могучий по этому запросу ничего путёвого не выдал? Вот если бы в bash можно было создавать массивы как в PHP, например, то было бы как-то так:
ipt[filter]=( INPUT OUTPUT FORWARD )
ipt[nat]=( PREROUTING INPUT OUTPUT POSTROUTING )
...

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash и массивы
« Ответ #5 : 01 Апрель 2016, 15:45:13 »
Например
Код: (bash) [Выделить]
declare -A ipt
ipt=( [filter_1]=INPUT [filter_2]=OUTPUT … [nat_4]=POSTROUTING )

i=2
echo ${ipt[filter_$i]}
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Stibin

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Bash и массивы
« Ответ #6 : 02 Апрель 2016, 00:55:23 »
Понятно, благодарю за пример!

 

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