# Script bash : question

**URL:** <https://www.debian-fr.org/t/script-bash-question/21658>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658 "2016-02-20T20:32:29Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/21 "2016-02-20T20:32:46Z")

</div>

Oui, ça me revient, le ‘!’ c’est la négation.  
Et du coup, c’est beaucoup plus clair avec le ‘!=’, en effet.  
Je suis sottttttttttttttttttttt !

[quote]Fait ausi attention :  
dans test (alias [) = et != sont pour comparer les chaines de caractère,  
pour les comparaisons arithmétiques c’est -eq, -ne, -gt etc…[/quote]

oui, ça je l’ai vu et j’ai retenu (enfin j’espère 😒 )

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/22 "2016-02-20T20:32:47Z")

</div>

Peut-on donner deux réponses possibles à une variable de texte ❓

#!/bin/bash

moi=ricardo OU Ricardo

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/23 "2016-02-20T20:32:48Z")

</div>

Pas bien compris ?

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/24 "2016-02-20T20:32:49Z")

</div>

moi=ricardo  
Moi=Ricardo  
MOI=RICARDO

=$moi or …

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/25 "2016-02-20T20:32:49Z")

</div>

Je crois que j’ai compris. Ça dépend de ton usage mais tu peut faire ça :

`var=salut
if echo $test | grep -iq "^$var$"; then
    echo "Ça match"
fi`  
Si c’est pour tester ta variable.

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/26 "2016-02-20T20:32:49Z")

</div>

Re,

[quote]# set PATH so it includes user’s private bin if it exists  
if [-d “$HOME/bin”] ; then  
PATH="$HOME/bin:$PATH"  
fi  
[/quote]

Ceci est dans le .profile de Ricardo et s’il n’est pas commenté ton path est complété

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/27 "2016-02-20T20:32:50Z")

</div>

S’il a choisi de tout mettre dans ~/bin oui s’il a préféré autre chose.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/28 "2016-02-20T20:32:53Z")

</div>

Oui, j’ai choisi ~/bin pour y loger mes futurs exploits et après la commande donnée par Mister, je suis bien dans le PATH, donc [prog.sh](http://prog.sh) démarre directement.  
Pour en revenir à ma question précédente, j’ai dû mal m’exprimer voici donc un exemple plus complet :

[code]#!/bin/bash

moi=ricardo # définition d’une variable texte

read -p "entrez votre nom : " nom  
if [$nom = $moi]; then  
echo "blabla"  
else  
etc.[/code]

Je sais que l’on peut faire autrement et plus simplement mais je voudrais quand même savoir s’il est possible, au lieu de n’avoir qu’un seul choix (ricardo), d’en avoir plusieurs pour la MÊME variable : $moi

Donc, shématiquement :  
moi=ricardo ou RICARDO ou Ricardo  
et qui si on entre un de ces trois noms, ça “passe”

---

<div class="post-metadata">

**Author:** ![L0u](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/b77776/32.png) [@L0u](https://www.debian-fr.org/u/L0u)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/29 "2016-02-20T20:32:53Z")

</div>

Hem, sauf si ta variable est une liste à ce moment là tu fais:

```auto
#!/bin/bash

moi=( ricardo RICARDO Ricardo ) # définition d'une liste de plusieurs valeurs
   
read -p "entrez votre nom : " nom
for $test in $moi; do
   if [$test == $nom];then
      echo "blabla"
   else
      echo "other"
   fi
done
```

sinon tu ne peux pas.  
Il y a encore une autre solution:

```auto
#!/bin/bash

   read -p "entrez votre nom : " nom
      if [$nom = Ricardo || $nom = RICARDO || $nom = ricardo]; then
         echo "blabla"
      else
         echo "other"
      fi
```

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/30 "2016-02-20T20:32:53Z")

</div>

Bonjour,

Sinon toutes les variables que tu lis depuis les shell, tu les passes en minuscule si tu as initialisé tes variables en minuscules :

[code]#!/bin/bash

moi=ricardo # définition d’une variable texte

read -p "entrez votre nom : " nom  
nom=$(printf $nom | tr ‘[A-Z]’ ‘[a-z]’)  
if [$nom = $moi]; then  
echo "blabla"  
else  
etc.  
fi[/code]

---

<div class="post-metadata">

**Author:** ![L0u](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/b77776/32.png) [@L0u](https://www.debian-fr.org/u/L0u)\
**Post date:** [Février 20, 2016, 8:32 UTC](https://www.debian-fr.org/t/script-bash-question/21658/31 "2016-02-20T20:32:57Z")

</div>

Sinon, j’ai trouvé une page avec pas mal d’exemples d’utilisations de tableauxen bash biensûr: [tldp.org/LDP/abs/html/arrays.html](http://tldp.org/LDP/abs/html/arrays.html)

et une tableau récapitulatif des opérateurs en bash: [laboiteaprog.com/article-79- … conditions](http://www.laboiteaprog.com/article-79-3-bash_les_conditions)

---

<div class="post-metadata">

**Author:** ![BBT1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/ecc23a/32.png) [@BBT1](https://www.debian-fr.org/u/BBT1)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/32 "2016-02-20T20:33:13Z")

</div>

[quote=“L0u!$”]

[code]  
#!/bin/bash

read -p "entrez votre nom : " nom  
if [$nom = Ricardo || $nom = RICARDO || $nom = ricardo]; then  
echo "blabla"  
else  
echo "other"  
fi  
[/code][/quote]

On peut aussi utiliser un ‘case’ dans ces conditions :

`
read -p "entrez votre nom : " nom
case "$nom" in
  Ricardo|RICARDO|ricardo) echo "blabla" ;;
  *) echo "other";;
esac`

Au passage je rappelle qu’il faut être très vigilant à l’expansion de variable shell quand il y a des espaces,  
et mettre “$VAR” à la place de $VAR est souvent une bonne idée 😉.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/33 "2016-02-20T20:33:14Z")

</div>

[code]#!/bin/bash

read -p "entrez votre nom : " nom  
if echo $nom | grep -iq “^ricardo$”; then  
echo "blabla"  
else  
echo "other"  
fi[/code]  
Et là tu n’a aucun problème de casse tout est géré.

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/34 "2016-02-20T20:33:15Z")

</div>

Salut,

Ce que je trouve pénible dans ce langage c’est le nombre de solutions possibles sans que je puisse déterminer quelle est la plus performante 😠

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/35 "2016-02-20T20:33:17Z")

</div>

[quote=“MisterFreez”][code]#!/bin/bash

read -p "entrez votre nom : " nom  
if echo $nom | grep -iq “^ricardo$”; then  
echo "blabla"  
else  
echo "other"  
fi[/code]  
Et là tu n’a aucun problème de casse tout est géré.[/quote]

Celle-là, je la retiens, ça me semble être la plus pratique dans ce genre d’erreurs possibles.  
Je vais la tester. J’ai fait comme Gérard le préconise, un prog “[essai.sh](http://essai.sh)”, sur mon autre machine, c’est pratique car le fichier est déjà présent et exécutable.  
Ce n’est pas que je fasse un prog mais je me renseigne quand je pense à quelque chose pour essayer de m’en souvenir, le moment venu :smt002

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/36 "2016-02-20T20:33:17Z")

</div>

Ok, ça fonctionne super :smt003  
Explications :  
-iq ❓  
^ ❓

```auto

```

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/37 "2016-02-20T20:33:17Z")

</div>

[quote=“ricardo”]Ok, ça fonctionne super :smt003  
Explications :  
-iq ❓  
^ ❓

```auto

```

Le ^ et $ désignent le début et la fin de la ligne, ce sont des expressions régulières "regex"  
[http://www.shellunix.com/regexp.html](http://www.shellunix.com/regexp.html)

Le i du grep signifie qu’on ne fait pas de différence quant à la casse de caractères mais le q 😒

---

<div class="post-metadata">

**Author:** ![micky979](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/d9b06d/32.png) [@micky979](https://www.debian-fr.org/u/micky979)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/38 "2016-02-20T20:33:18Z")

</div>

Bonjour,

man grep :

[quote]-q, --quiet, --silent  
Ne pas afficher les résultats normaux. Sortir immédiatement avec un code de retour égal à zéro dès qu’une concordance est trouvée, même si une erreur est détectée. Voyez aussi l’option -s ou --no-messages. (-q est spécifiée dans POSIX)[/quote]

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/39 "2016-02-20T20:33:18Z")

</div>

[quote=“ricardo”]Ok, ça fonctionne super :smt003  
Explications :  
-iq ❓  
^ ❓

```auto

```

i comme ignore et q comme tais-toi (t’as eu peur)

^ du début à $ la fin

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 20, 2016, 8:33 UTC](https://www.debian-fr.org/t/script-bash-question/21658/40 "2016-02-20T20:33:19Z")

</div>

> [@](#):
>
> Le ^ et $ désignent le début et la fin de la ligne, ce sont des expressions régulières "regex"  
> [http://www.shellunix.com/regexp.html](http://www.shellunix.com/regexp.html)

De toute la ligne ou de ce qui est compris entre les guillemets 😕  
Bien, le lien, un de plus dans la boîte :smt003

[Page précédente](https://www.debian-fr.org/t/script-bash-question/21658.md?page=1)

[Page suivante](https://www.debian-fr.org/t/script-bash-question/21658.md?page=3)
