Script shell "if...." déconne!

Pourquoi fonctionnement "if…"en script bash ne se déroule pas comme attendu dans le script suivant:

#!/bin/bash
echo "saisir une extension:"
read ext
echo "$ext"
if [ "$ext"=="jpg" ]; then
        echo "fichier image"
else
        echo "pas image"
fi

exemple tiré d’un linux pratiqur hors série(n°18):
le problème : quelque soit l’extension fichier choisie, on aura comme réponse « fichier image » !!

merci d’une explication
Pat

j’ai copié le code et ça fonctionne

Bonjour

Le if fonctionne très bien, mais c’est le test de comparaison que tu avais mal formulé.

Tu n’avais pas mis d’espaces avant et après l’opérateur ==
ce qui fait que l’ensemble "$ext"=="jpg" ne faisait au final qu’un seul mot,
ce qui faisait disparaître l’opérateur ==

Donc le test ne faisait aucune comparaison puisque tes deux caractères « == » faisaient partie du seul et unique mot qu’il y avait dans le test .

Le résultat du test, sans opérateur, était donc toujours vrai
quelle que soit la valeur assignée à la variable ext


Pour comparer deux chaînes de caractères, un seul caractère = est suffisant.

Essaye plutôt comme ça :

#!/bin/bash
echo "saisir une extension:"
read ext
echo "$ext"
if [ "$ext" = "jpg" ]; then
        echo "fichier image"
else
        echo "pas image"
fi

=======
Un lien concernant la commande test : wiki.bash-hackers.org → The classic test command

6 J'aime

en fait il faut systématiquement un espace entre les opérandes et les opérateurs :slight_smile:

Ok il m’avait semblé avoir essayé ce dernier exemple, mais j’ai dû le sauter! en tout cas merci, çà fonctionne