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

**URL:** <https://www.debian-fr.org/t/script-shell-if-deconne/87965>\
**Category:** Programmation\
**Created:** [Mars 9, 2023, 1:11 UTC](https://www.debian-fr.org/t/script-shell-if-deconne/87965 "2023-03-09T13:11:55Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![patroc](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/f14d63/32.png) [@patroc](https://www.debian-fr.org/u/patroc)\
**Post date:** [Mars 9, 2023, 1:11 UTC](https://www.debian-fr.org/t/script-shell-if-deconne/87965/1 "2023-03-09T13:11:55Z")

</div>

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

```bash
#!/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 «&nbsp;fichier image&nbsp;» !!

merci d’une explication  
Pat

---

<div class="post-metadata">

**Author:** ![yatta](https://www.debian-fr.org/user_avatar/www.debian-fr.org/yatta/32/12132_2.png) [@yatta](https://www.debian-fr.org/u/yatta)\
**Post date:** [Mars 9, 2023, 1:58 UTC](https://www.debian-fr.org/t/script-shell-if-deconne/87965/2 "2023-03-09T13:58:12Z")

</div>

j’ai copié le code et ça fonctionne

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Mars 9, 2023, 3:04 UTC](https://www.debian-fr.org/t/script-shell-if-deconne/87965/3 "2023-03-09T15:04:21Z")

</div>

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 «&nbsp;==&nbsp;» 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 :

```bash
#!/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](https://wiki.bash-hackers.org/commands/classictest)

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Mars 9, 2023, 6:19 UTC](https://www.debian-fr.org/t/script-shell-if-deconne/87965/4 "2023-03-09T18:19:09Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![patroc](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/f14d63/32.png) [@patroc](https://www.debian-fr.org/u/patroc)\
**Post date:** [Mars 12, 2023, 3:20 UTC](https://www.debian-fr.org/t/script-shell-if-deconne/87965/5 "2023-03-12T15:20:46Z")

</div>

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