Conditions
Dans UNIX, chaque commande émet un statut en sortant :
Une valeur de 0 veut dire que la commande est terminé avec succès
Une valeur supérieur à 0 veut dire une erreur
On peut à tout moment récupérer le statut de la dernier commande effectuée avec la variable $?
:
Par exemple :
Dans l'exemple, on voit le statut de 0 après la commande echo
. En revanche, la commande cat
a crée une erreur, et donc il y avait 1 dans $?
.
On pourrait donc faire de la logique dans nos scripts basé sur le statut des commandes.
Une commande spéciale qui s'appelle test
permet d'évaluer des conditions, et émettre le bon statut selon le résultat de l'évaluation :
Si la condition passe,
test
se termine avec succès en mettant 0 dans la variable$?
Si la condition ne passe pas,
test
se termine avec erreur, en mettant 1 dans la variable$?
Essayez vous-même :
Avec test
on peut donc formuler une condition :
La formulation de la commande if
et donc :
Attention au point-virgule après la commande, et les mots-clés
then
etfi
!
Options de test
test
La commande test
permet de tester un grand nombre de conditions :
Conditions numériques
test $A -eq $B
Tester que la valeur (numérique) dans $A
est égale à $B
test $A -ne $B
Tester que la valeur (numérique) dans $A
n'est pas égale à $B
test $A -gt $B
Tester que la valeur (numérique) dans $A
est supérieure à $B
test $A -ge $B
Tester que la valeur (numérique) dans $A
est supérieure ou égale à $B
test $A -lt $B
Tester que la valeur (numérique) dans $A
est inférieure à $B
test $A -le $B
Tester que la valeur (numérique) dans $A
est inférieure ou égale à $B
Conditions avec les chaînes de caractères (strings)
test $A = $B
Tester que le string dans $A
est égale au string dans $B
test $A != $B
Tester que le string dans $A
n'est pas égale au string dans $B
test -z $A
Tester que la variable $A
est vide
test -n $A
Tester que la variable $A
contient au moins 1 caractère (non-vide)
Conditions des fichiers
test -e $A
Tester que le fichier ou le répertoire qui est précisé dans $A existe
test -f $A
Tester que le fichier qui est précisé dans $A existe
test -d $A
Tester que le répertoire qui est précisé dans $A existe
A tout moment, on peut inverser la logique avec le symbole !
.
Par exemple, si un fichier de nom abc.txt
n'existe pas :
Formulation de test
avec les crochets
test
avec les crochetsUne autre formulation de la commande test
existe, qui est parfois plus lisible pour un développeur, en utilisant les crochets [
et ]
:
Exercice
Rédigez un script bouncer.sh
qui aide un contrôleur d'une boîte de nuit à calculer l'age d'entrée des visiteurs.
Si un visiteur à moins que 23 ans, il/elle ne pourra pas entrer.
Le script doit demander l'année de naissance du visiteur, et émettre :
Bienvenue ! Amusez vous bien !
Non-autorisé, il faut attendre X ans avant de rentrer.
Dernière mise à jour