Tableau et boucle for en bash

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Cette réponse a aidé l’auteur du sujet

Bonjour,

Je suis étonné que le code suivant ne parcours pas tout le tableau tab :

#!/bin/bash

tab=('valeur1' 'valeur2' 'valeur3')

for variable in $tab
do
    echo "La variable vaut $variable"
done

Seule la première valeur est affichée.
Comment utiliser la boucle for pour parcourir successivement toutes les valeurs d’un tableau ?

+0 -0

Cette réponse a aidé l’auteur du sujet

C’est juste une syntaxe pour dire "prends tous les éléments", tu peux utiliser ${tab[*]} à la place.

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+0 -0
Auteur du sujet

Hum…. mon cours affirme que l’exemple suivant devrait, à la ligne 4, comparer les deux chaînes de caractères mais cela ne fonctionne pas :

#!/bin/bash

a="arbre"
b="maison"

if [ $a<$b ]; then
    echo OK
fi

./script.sh: ligne 6: maison: Aucun fichier ou dossier de ce type

Mon cours me fatigue, il semble complètement bugué ?
Bref, comment comparer deux chaînes de caractères en bash en suivant l’ordre alphabétique ?

+0 -0
Auteur du sujet

Désolé j’ai parlé trop vite, bash c’est un enfer :(

ça a marche une fois, puis maintenant ce script ne fonctionne plus et affiche toujours la même erreur :

#!/bin/bash

a="arbre"
b="maison"

if [[ $a<$b ]]; then
    echo OK
fi

Même résultat en C/C le script d'@Amaury

+0 -0

T’es sûr ? Parce que là pour le coup le script est correct, et il fonctionne chez moi.

EDIT : par ailleurs, n’hésite pas à ouvrir un nouveau sujet lorsque tu as un nouveau problème. La comparaison de chaînes n’a rien à voir avec l’itération d’un tableau.

Édité par adri1

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+1 -0

La même erreur que plus haut ? Étrange, chez moi ça fonctionne très bien, tout comme @adri1

$ cat t.sh
#!/bin/bash

a="arbre"
b="maison"

if [[ $a<$b ]]; then
    echo OK
fi


$ bash t.sh
OK

Tu es sur quel bash ? Tu as fait quelque chose de particulier ? Tu exécutes bien le bon script (au cas où :p) ?

Édité par Amaury

#JeSuisArius

+1 -0
Auteur du sujet

T’es sûr ? Parce que là pour le coup le script est correct, et il fonctionne chez moi.

adri1

Alors en voulant faire une capture d’écran et en voulant démontrer qu’il y avait une erreur, en fait je me suis rendu compte que j’avais exécuté une copie du script avec encore l’ancienne version :lol:

Désolé pour cette perte de temps.
EDIT : devancé par Amaury :)

EDIT 2 : @adri1 J’y penserai merci :)

Édité par Green

+1 -0
Auteur du sujet

J’ai trouvé par hasard une manière d’éviter les doubles crochets :

#!/bin/bash

a='arbre'
b='maison'

if [ $b \> $a ]; then
    echo OK
else
    echo NOPE
fi

Je me demande si cette solution n’est pas davantage compatible avec les shells POSIX comme discuté ici :

[[ works only in Bash, Zsh and the Korn shell, and is more powerful; [ and test are available in POSIX shells.

+0 -0

Cette réponse a aidé l’auteur du sujet

En pratique la compatibilité POSIX pure apporte rarement quelque chose. Si un jour tu as à bosser sur une machine sans au moins bash, tu pourras t’en soucier. Il y a de fortes chances pour que ça n’arrive jamais. Et si ça arrive, il y a de fortes chances pour que tu n’écrives pas des scripts shell pour cette machine de toute façon.

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+1 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte