#1 Le 23/05/2009, à 12:15
- ET01
[Résolu]Bash question (simple) sur comparaison chaine de caractères
Bonjour,
J'ai un peu honte de poser la question tant elle parait simple, mais je commence tout juste en bash.
J'essaie le petit script
#!/bin/bash
reptype=$2
echo "$reptype"
if [ "$reptype"='Music' ];
then
echo "Musique"
else
echo "autre"
fi
Comment se fait-il que j'ai toujours "Musique" qui s'affiche alors que je saisis 'Music', ou 'titi' ou 'toto' en 2ème paramètre ?
Est-ce le if qui a un problème ou bien est-ce la comparaison de chaine de caractères ?
Je cherche depuis 2 heures et je n'arrive pas à m'en sortir.
Merci.
Dernière modification par ET01 (Le 23/05/2009, à 13:08)
Hors ligne
#2 Le 23/05/2009, à 12:41
- freaxmind
Re : [Résolu]Bash question (simple) sur comparaison chaine de caractères
Ca fait longtemps que j'ai pas fait un bash, mais je me lance.
if [ "$reptype"='Music' ];
C'est une opération d'assignation, et pas de comparaison, je m'explique.
La tu es en train de dire, 'met la variable reptype à la valeur Music'. La variable est donc différente de 0 ( soit toujours vrai dans ta condition ) donc tu tombes tonjours dans le cas Musique.
Si tu veux faire une comparaison, ' est ce que la variable reptype est égale à Music ', utilise ==
Mais tu n'es pas obligé de faire tes scripts en bash, il y a des très bon langage et très puissant pour le faire python par exemple.
dans ce cas la, il te suffit de faire (grossièrement) :
directoryName = sys.argv[2]
if Music in directory_name:
print 'Musique'
else:
print 'autre'
Hors ligne
#3 Le 23/05/2009, à 12:54
- "-"
Re : [Résolu]Bash question (simple) sur comparaison chaine de caractères
Il me semble que ce n'est pas ça, mais plutôt que les opérateurs de comparaison ne sont pas les mêmes pour les string et les nombres. Pour les strings de mémoire c'est eq, neq, etc... alors que pour les nombres c'est "=", "!=", ...
Vérifie pour les opérateurs exacts.
"-".
Hors ligne
#4 Le 23/05/2009, à 13:00
- ®om
Re : [Résolu]Bash question (simple) sur comparaison chaine de caractères
if [ "$reptype" = 'Music' ];
avec des espaces autour de =
Sinon ça revient à faire :
if [ 'Musique=Music' ]
c'est-à-dire tester si la chaîne 'Musique=Music' n'est pas vide, ce qui est toujours vrai.
Hors ligne
#5 Le 23/05/2009, à 13:07
- ET01
Re : [Résolu]Bash question (simple) sur comparaison chaine de caractères
Merci. C'est bien "==".
A +
Hors ligne
#6 Le 23/05/2009, à 13:11
- ®om
Re : [Résolu]Bash question (simple) sur comparaison chaine de caractères
Merci. C'est bien "==".
A +
bash accepte les deux. Faut juste bien mettre les espaces autour
Hors ligne