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


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

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 »
как прокрутить для каждой таблицы массив с её цепочками?
Я понимаю что компьютерный сленг звучит круто, но за гранью понимания осталось что именно Вы хотите сделать и нафига Вам это надо?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

$ $ $

  • Гость
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.046 секунд. Запросов: 23.