Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tableau en bash

13 réponses
Avatar
Thomas
bonjour :-)


j'aurais besoin d'un tableau avec
- des noms d'ordinateurs (j'aimerais pouvoir les designer par une lettre)
- pour chacun : login, adresse ip, adresse mac

est ce que c'est possible de faire ça en bash ?
(c'est pour utiliser dans des fonctions disponibles dans le shell
interactif)

si oui, pouvez vous m'indiquer la partie de man bash qui m'intéresse,
svp ? :-)

--
Téléassistance / Télémaintenance
http://www.portparallele.com/ThomasDECONTES/

3 réponses

1 2
Avatar
Cyrille Lefevre
Cyrille Lefevre a écrit :
Thomas a écrit :
In article ,
Cyrille Lefevre <cyrille.lefevre-news%
wrote:

Thomas a écrit :
In article
,
totof2000 wrote:

On 21 juin, 15:05, Thomas >
wrote:

j'aurais besoin d'un tableau avec
- des noms d'ordinateurs (j'aimerais pouvoir les designer par une
lettre)
- pour chacun : login, adresse ip, adresse mac

est ce que c'est possible de faire ça en bash ?
(c'est pour utiliser dans des fonctions disponibles dans le shell
interactif)

si oui, pouvez vous m'indiquer la partie de man bash qui m'intér esse,
svp ? :-)



echo "Nom ordi;login;adresse IP;adresse MAC" >tableau.csv
echo "A;toto;12.34.56.78;FCFF3456">>tableau.csv

Je doutes cependant que ce soit ce que tu veux faire.


en fait je veux faire juste l'inverse :

à la rigueur si faut vraiment passer par un csv je peux le faire à
la main
mais après il faut le lire



je sais, c'est pas bien de faire les exercices des autres, mais bon : -)

i=0; while IFS=';' read -r host[i] login[i] ip[i] mac[i]; do (( i +=
1 )); done < fichier.csv # avec ; comme séparateur
unset host[i] login[i] ip[i] mac[i]
for i in ${!host[@]}; do echo "$i => ${host[i]} ${login[i]} ${ip[i] }
${mac[i]}"; done



avec ce système, on est tjr obligé de connaître le i d'un ordi, pour
avoir accès à ses infos ?
y a rien de trivial pour avoir le i quand on connaît le host[i] ?



google bash associative arrays

http://linuxshellaccount.blogspot.com/2008/05/how-to-fake-associative-a rrays-in-bash.html


hindex() { local i; for i in ${!host[@]}; do if [[ ${host[i]} == $1 ]];
then echo $i; return 0; fi; done; return 1; }
i=$(hindex A) && echo "$i => ${host[i]} ${login[i]} ${ip[i]} ${mac[ i]}"





Bonjour,

PS : mauvais shell, changer shell => ksh93 car il sait gérer les
tableaux associatifs ou awk, mais cela ne faisait pas partie de
l'assertion du départ...

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Stephane CHAZELAS
2009-06-24, 04:54(+02), Cyrille Lefevre:
[...]
PS : mauvais shell, changer shell => ksh93 car il sait gérer les
tableaux associatifs ou awk, mais cela ne faisait pas partie de
l'assertion du départ...


[...]

Les dernieres versions de bash ont le support des tableaux
associatifs tout comme ksh93 et zsh. Mais awk parsant un fichier
de definitions me semble plus approprié, plutot que d'ecrire un
script dans un language non-standard.

--
Stéphane
Avatar
Thomas
In article ,
Lucas Levrel wrote:

Le 22 juin 2009, Thomas a écrit :

> par contre, je suis obligé d'utiliser des chiffres ? pas possibilité
> d'appeler les ordis par leur nom ?

Plus ou moins. man bash, /indirection

Exemple :
coulomb:~> toto=5
coulomb:~> titi=toto
coulomb:~> echo ${!titi}
5

Donc tu crées une variable par ordi qui contient son numéro (totonum=1,
foonum=2...), puis si host contient le nom de l'ordi (toto, foo...), tu
obtiens son numéro avec temp=${host}num, puis ${!temp}.



bon ben tu viens de me donner une idée :-)


au lieu de faire un tableau pour chaque propriété, je fais un tableau
pour chaque ordi :-)

awk m'a l'air assez compliqué,
et je pense que ça sera suffisant et le plus simple pour mon cas :-)


quoi qu'il en soit, merci à tous :-)
on apprend tjr des petits trucs :-)

--
Téléassistance / Télémaintenance
http://www.portparallele.com/ThomasDECONTES/
1 2