Tableaux en shell

Résolu/Fermé
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 - 16 oct. 2008 à 10:54
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 16 oct. 2008 à 15:13
Bonjour tout le monde!!

Alors voila, je voudrais stocker le résultat d'une commande dans un tableau le tout en langage shell.

Par exemple le résultat de la commande ls va donc me ressortir plusieurs noms et je voudrais que chacun de ces noms soient affecté à une valeur du tableau :

nom_fichier1 dans tableau[1]
nom_fichier2 dans tableau[2]
...

Le problème est que je ne sais pas comment écrire cela, que doit-je mettre entre les crochets??

tableau[?]=$(ls)

Merci d'avance

17 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 11:19
Salut,
jp@MDK:~/tmpfs ssh$ touch fich{1,2,3,4,5}.txt

jp@MDK:~/tmpfs ssh$ ls
fich1.txt  fich2.txt  fich3.txt  fich4.txt  fich5.txt

jp@MDK:~/tmpfs ssh$ tableau=( $(ls) )

jp@MDK:~/tmpfs ssh$ echo ${tableau[0]}
fich1.txt

jp@MDK:~/tmpfs ssh$ echo ${tableau[2]}
fich3.txt

jp@MDK:~/tmpfs ssh$ echo ${tableau[@]}
fich1.txt fich2.txt fich3.txt fich4.txt fich5.txt

jp@MDK:~/tmpfs ssh$
;-))
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 11:27
Lorsque je fais :

$ echo ${tableau[0]}

j'obtiens :

Bad substitution

par contre si je fais :

$ echo $tableau[0]

j'obtiens :

fich1.txt fich2.txt fich3.txt fich4.txt fich5.txt

faut-il faire quelque chose au préalable pour que mon tableau se remplisse convenablement??
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 11:30
Quel shell ?
Quel système ?
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 11:32
Je suis sous ubuntu 8.04 et mon script porte l'extension .sh

En tout cas, merci de m'aider ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 11:36
Comment as-tu déclaré ton tableau ?
Comme dans mon exemple ?
Attention il faut un espace de part et d'autre des parenthèses dans :
tableau=( $(ls) )
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 11:41
pour tableau=( $(ls) )

Au debut je les avais bien mises mais ça me fait cette erreur :

Syntax error: "(" unexpected

Donc par la suite j'ai utilisé cette syntaxe :

tableau=$(ls)

mais je pense que c'est la raison de l'erreur Bad substitution
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 12:25
Rajoute des quotes autour :

tableau="( $(ls) )"
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 13:06
J'ai bien mis les guillemets mais j'ai toujours l'erreur bad substitution à la ligne

echo ${tableau[0]}

pareil si je l'écrit

echo "${tableau[0]} "

ou comme ça

echo "(${tableau[0]} )"
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 13:11
Essaie de reproduire ça :
jp@MDK:~/tmpfs ssh$ tableau=( A B C D E )

jp@MDK:~/tmpfs ssh$ echo ${tableau[@]}
A B C D E

jp@MDK:~/tmpfs ssh$ echo ${tableau[*]}
A B C D E

jp@MDK:~/tmpfs ssh$ echo ${tableau[0]}
A

jp@MDK:~/tmpfs ssh$ echo ${tableau[1]}
B

jp@MDK:~/tmpfs ssh$ echo ${tableau[4]}
E

jp@MDK:~/tmpfs ssh$
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 13:19
Il y a un truc que je pige pas, si je le fais directement dans mon terminal cela fonctionne bien.

Par contre si je le fais en exécutant mon script : sh mon_script.sh j'ai une erreur.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 13:21
Affiche ton script alors...
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 13:29
Bah le truc c'est que j'ai fait des copier coller de mon script dans le terminal mais le voila :


#! /bin/sh

tableau=( A B C D E )

echo ${tableau[1]}
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 13:32
Affiche un copier/coller du lancement de ton script et de l'erreur générée...

PS. Chez moi ça passe bien ;-\
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 13:40
# sh mon_script.sh
mon_script.sh: 3: Syntax error: "(" unexpected

Si j'écris tableau=( A B C D E )


sh mon_script.sh
mon_script.sh: 5: Bad substitution

si je met tableau="( A B C D E )"

toujours avec

echo ${tableau[1]}
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 13:54
Oublie définitivement cette forme :
tableau="( A B C D E )"
c'est une grosse c*nnerie que j'ai dite :-((

Par contre je ne m'explique pas l'autre erreur :-\

Je n'ai pas trop le temps là, je regarderai ça de plus près ce soir...
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 13:58
Ok pas de soucis, je vais continuer de chercher et merci pour ton aide
0
Alucard95 Messages postés 157 Date d'inscription mardi 7 octobre 2008 Statut Membre Dernière intervention 19 juin 2009 2
16 oct. 2008 à 15:07
Soluce trouvé jipicy, mon problème venait du fait que j'utilisait sh pour lancer mon script.
Si j'utilise la commande bash cela fonctionne :)

Merci de ton aide!!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 15:13
No problemo ;-)
0