Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 = smile

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 "==".

smile

A +

Hors ligne

#6 Le 23/05/2009, à 13:11

®om

Re : [Résolu]Bash question (simple) sur comparaison chaine de caractères

ET01 a écrit :

Merci. C'est bien "==".

smile

A +

bash accepte les deux. Faut juste bien mettre les espaces autour smile

Hors ligne