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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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

Оффлайн Azure

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

Оффлайн $ $ $

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

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5661
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Bash и массивы
« Ответ #3 : 31 Март 2016, 21:01:56 »
Если по Вашему
Код: Bash
  1. for i in "${ipt_table[@]}"; do
  2.     echo ${i}:
  3.     for j in $(eval echo "\${chain_$i[@]}"); do
  4.         echo -e \\t$j
  5.     done
  6. 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

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5661
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: Bash и массивы
« Ответ #5 : 01 Апрель 2016, 15:45:13 »
Например
Код: Bash
  1. declare -A ipt
  2. ipt=( [filter_1]=INPUT [filter_2]=OUTPUT … [nat_4]=POSTROUTING )
  3.  
  4. i=2
  5. echo ${ipt[filter_$i]}
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Stibin

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

 

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