Les conditions sous Bash sont très différentes de ce qu'on peut retrouver dans les autres langages de programmation telle que le C, pascal, Java... Les espaces sont importants, s'ils ne sont pas pris en considérations, il est possible que le script ne puisse fonctionner. Une autre particularité est qu'il existe différents paramètres selon ce qu'on désire tester.
Tableau des opérateurs
Opérateur | Description (retourne vrai si..) |
-d | si le répertoire existe |
-e | si le fichier existe |
-f | si le fichier (pas un répertoire ou fichier de périphérique: /dev/sda1...) |
-r | si le fichier peut être lu |
-w | si le fichier peut être écrit |
-x | si le fichier peut être exécuté |
-L | si le fichier est un lien symbolique |
-z | si la chaine de caractère est nulle |
-n | si la chaine de caractère n'est pas nulle |
-eq | s'ils sont équivalents (nombre) |
-neq | s'ils ne sont pas équivalents |
= ou == | si les chaines de caractère ou nombre sont égaux |
!= | s'ils ne sont pas égaux |
-lt | est plus petit que |
-gt | est plus grand que |
-le | est plus petit ou égale |
-ge | est plus grand ou égale |
-a ou && | et logique |
-o ou || | ou logique |
Quelques exemples
On vérifie ci-dessous si le fichier qemu.htm existe. S'il existe, nous affichons un message.if [ -e qemu.htm ]; then echo "Qemu.htm existe"; fiOn vérifie ci-dessous si le contenu de la variable X est plus petit que Y.
X=3 Y=12 if [ $X -lt $Y ] then echo "\$X=$X, est plus grand ou égale \$Y=${Y}" fiNotez que si on ne met pas de ";" à la fin du if, le then doit être sur la prochaine ligne. En mettant "\" devant le nom de la variable existante, c'est le nom de la variable qui est affiché.
On vérifie si les chaînes de caractères sont identiques
X="allo" Y="aillo" if [ $X = $Y ]; then echo "les chaines sont identiques"; else echo "les chaines ne sont pas identiques"; fiIl est possible de savoir si une chaîne de caractère débute ou se termine par un certain caractère.
X="allo" if [[ $X == a* ]]; then echo "$X commence par a"; fi X="allo2" if [[ $X == *2 ]]; then echo "$X fini par 2"; fiLes comparaisons binaires peuvent être faites de deux façons avec les opérateurs. Soit, on utilise -a ou && pour le et binaire. Soit on utilise -o ou || pour le ou binaire.
X=33 Y=23 A=12 B=23 if [ $X -gt $Y ] && [ $A -lt $B ]; then echo "$X est plus grand que $Y et $A est plus petit que $B "; fiNotez que si vous utilisez directement -a (ou -o) vous devez écrire:
X=33 Y=23 A=12 B=23 if [ $X -gt $Y -a $A -lt $B ]; then echo "$X est plus grand que $Y et $A est plus petit que $B "; fi
Imbrication de if
Lorsqu'on a plusieurs de suites, on doit utiliser elif.X=20 Y=30 Z=40 if [ $Z -lt $X ]; then echo "$Z est plus petit que $X"; elif [ $Z -lt $Y ]; then echo "$Z est plus petit que $Y"; else echo "$Z est plus petit que 50"; fi
Case
Au lieu d'utiliser de nombreux if et else, il peut être pratique d'utiliser un case afin de simplifier le code et de le rendre plus lisible.echo "Fait t'il soleil ? [oui or non]: " read reponse case $reponse in o* | O*) echo "vous avez repondu qu'il faisait soleil"; ;; n* | N*) echo "vous avez repondu qu'il ne faisait pas soleil"; ;; *) echo "vous avez mal répondu à la question"; ;; esacVous pouvez noter que chaque condition se termine par ")", qu'à la fin de chaque commande on a ";;" et qu'on inscrit esac à la fin. Il arrive souvent qu'on inscrive la commande à l'envers en bash. Au début de ce script, on pose une question à l'usager. Lorsque l'utilisateur tapera sur une touche et appuiera sur entrée, cette touche sera lu (grâce à la fonction read) et une action sera faite selon sa valeur.
Nous avons completé la partie traitant des conditions. Un script avec tous les exemples peut être téléchargé ici
Aucun commentaire:
Enregistrer un commentaire