Shell les tableaux

Hello

Je me demande si un tableaux a 2 dimention est possible ?
je compte m’en servir pour un petit script iptables.

l’idée c’est 1 tableau pour les ip, le second pour les port

on pourait donc :

var_tab_ip="ip1 ip2 ip3 " , “22 80 110”

il faudrai ensuite boucler sur les (le ?) tableaux de manipre a obtenir
debut d ela boucle:
iptables [ip1] [22]
iptables [ip2] [80]
iptables [ip3] [110]
fin
mai je sai pas si c est possible ?

Salut,

Le chapitre 26 de la doc http://abs.traduc.org/abs-fr/ parle de tableaux. :character-spongebobdance:

merci pour le lien bon j’ai pas encore tout lu :023

Bonjour,

Les tableaux à 2 dimensions n’existent pas en shell.
awk le permet mais c’est très dangereux je trouve. En effet, t[i][j] est l’équivalent de t[ij]. Ce qui implique qu’il faut être certain que la case ij ne sera pas pris par ailleurs.

Cela dit, bash 4 a introduit la notion de tableaux associatifs. En gros, les indices peuvent être autre chose que des entiers.
du coup, tu peux t’en sortir avec un seul tableau dont les indices seraient les ip et ayant pour valeur les ports.

edit : à noter que le site d’abs est un peu “deprecated”.

[quote=“Totor”]Cela dit, bash 4 a introduit la notion de tableaux associatifs. En gros, les indices peuvent être autre chose que des entiers.
du coup, tu peux t’en sortir avec un seul tableau dont les indices seraient les ip et ayant pour valeur les ports.[/quote]
Même avec ça il va falloir sérialiser les ports, puisque dans une case de la map tu ne peux pas mettre un tableau (je crois).

en fait, tu peux t’en sortir ainsi :

# declaration du tableau associatif
declare -A iptables

# initialisation
iptables["ip1"]="port1 port2 port3"
iptables["ip2"]="port5 port6 port7 port8"


# recuperation de la liste des ports d'une ip sous forme de tableau
ports=( ${iptables["ip2"]} )
# affichage des ports 
printf "\t - %s\n" ${ports[@]}

mais du coup, la 2nde dimension du tableau n’en est pas vraiment une. C’est simplement une chaine de caractère que l’on transforme en tableau.