Dans cette documentation, vous allez apprendre le concept de conditions en Bash.
Une condition est une fonctionnalité de votre script qui comme son nom l'indique va vous permettre d'effectuer des vérifications et d'exécuter du code selon certaines conditions.
Les conditions sont des éléments très importants de vos scripts puisqu'ils vont vous permettre d'adapter presque "automatiquement" le comportement de votre script en fonction d'une situation définie.
Ces conditions peuvent permettre plusieurs choses, elles permettent de vérifier que deux chaines de caractères correspondent, que deux chiffres correspondent, que deux variables soient identiques, etc...
Si on suit dans l'idée la synthaxe que devrait avoir notre condition elle ressemblerait à cela
si la condition est vrai
alors j'exécute ce code :
code
Ces conditions sont appelés if
en bash. La synthaxe est la suivante
if [ condition ] ; then
execution_de_code
fi
Les conditons peuvent prendre plusieurs "formes" je peux vérifier l'existance d'une valeur, la correspondance, etc...
Dans le tableau ci-dessous retrouvez les différents comparatifs utilisés pour des conditions
Voici la liste non exhaustive des comparatifs pour les chaines de caractères
Condition | Signification |
---|---|
[ "$a" = "$b" ] |
Vérifie si les deux chaines de caractères sont identiques |
[ "$a"!= "$b" ] |
Vérifie si les deux chaines sont différentes |
[ -z "$a" ] |
Vérifie si la chaine $a est vide |
[ -n "$a" ] |
Vérifie si la chaine $a est non vide |
Voici la liste non exhaustive des comparatifs pour les nombres
Condition | Signification |
---|---|
[ "$a" -eq "$b" ] |
Vérifie si les nombres sont égaux (equal) |
[ "$a" -ne "$b" ] |
Vérifie si les nombres sont non égaux (not equal) |
[ "$a" -lt "$b" ] |
Vérifie si $a est strictement inférieur (<) à $b (lower than) |
[ "$a" -le "$b" ] |
Vérifie si $a est inférieur ou égal (<=) à $b (lower or equal) |
[ "$a" -gt "$b" ] |
Vérifie si $a est strictement supérieur à $b (greater than) |
[ "$a" -ge "$b" ] |
Vérifie si $a est supérieur ou égal à $b (greater or equal) |
Voici la liste non exhaustive des comparatifs pour les fichiers/dossiers
Condition | Signification |
---|---|
[ -e "$nom" ] |
Vérifie si le fichier existe |
[ -d "$nom" ] |
Vérifie s'il s'agit d'un répertoire (directory) |
[ -f "$nom" ] |
Vérifie s'il s'agit d'un fichier (et non un dossier par exemple) |
[ -L "$nom" ] |
Vérifie s'il s'agit d'un lien symbolique |
[ -r "$nom" ] |
Vérifie si le fichier a les droits en lecture |
[ -w "$nom" ] |
Vérifie si le fichier a les droits en écriture |
[ -x "$nom" ] |
Vérifie si le fichier est exécutable |
[ "$n" -nt "$m" ] |
Vérifie si $n est plus récent que $m (newer than) |
[ "$n" -ot "$m" ] |
Vérifie si $n est plus vieux que $m (older than) |
Ces conditions permettent donc de vérifier d'autres points "sinon" appelé else
et "sinon si" appelé elif
Par exemple "si la condition est vrai j'execute le code A sinon le code B" ce qui en bash donnerait
if [ condition ] ; then
code_A
else
code_B
fi
Pour vérifier de multiples conditions j'utiliserais donc elif
if [ condition 1 ] ; then
code_A
elif [ condition 2 ] ; then
code_B
else
code_C
fi
Ce n'est pourtant pas la seule méthode pour vérifier de mutltiples conditions ! Il existe le ET(&&) ainsi que le OU (||)
Cela me permettrait de vérifier sur une seule ligne de "multiples conditions" pour exécuter un type de code
if [ condition 1.1 ] && [ condition 1.2 ] ; then
code_A
elif [ condition 2.1 ] || [ condition 2.2 ] ; then
code_B
else
code_C
fi
Dans le cas ci-dessus :
Si je reprends le script que j'avais effectuée dans la partie "variable" et "argument"
#!/bin/bash
firstLS=$(ls $1)
echo $1 :
echo $firstLS
secondLS=$(ls $2)
echo $2 :
echo $secondLS
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
Je pourrais ajouter des conditions me permettant de vérifier si j'ai des arguments vide ("") alors je n'affiche rien (ou un message "d'erreur")
Pour cela (chacun sa méthode aucune n'est mauvaise) pour ma part je vais vérifier si l'argument est non vide.
#!/bin/bash
if [ -n "$1" ] ; then
firstLS=$(ls $1)
echo $1 :
echo $firstLS
else
echo "Argument n°1 manquant, attendu : nom du dossier à afficher"
exit
fi
if [ -n "$2" ] ; then
secondLS=$(ls $2)
echo $2 :
echo $secondLS
else
echo "Argument n°2 manquant, attendu : nom du dossier à afficher"
exit
fi
if [ -n "$3" ] ; then
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
else
echo "Argument n°3 manquant, attendu : nom du dossier à afficher"
exit
fi
J'aurais pu "inverser" la vérification et dire à mon script que si la chaine de caractère est vide il affiche le message
#!/bin/bash
if [ -z "$1" ] ; then
echo "Argument n°1 manquant, attendu : nom du dossier à afficher"
exit
else
firstLS=$(ls $1)
echo $1 :
echo $firstLS
fi
if [ -z "$2" ] ; then
echo "Argument n°2 manquant, attendu : nom du dossier à afficher"
exit
else
secondLS=$(ls $2)
echo $2 :
echo $secondLS
fi
if [ -z "$3" ] ; then
echo "Argument n°3 manquant, attendu : nom du dossier à afficher"
exit
else
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
fi
Je pourrais également ajouter une condition à chacun de mes if vérifiant si l'argument est bien un dossier car je ne veux pas afficher un fichier.
#!/bin/bash
if [ -n "$1" ] && [ -d "$1" ] ; then
firstLS=$(ls $1)
echo $1 :
echo $firstLS
else
echo "Argument n°1 manquant, attendu : nom du dossier à afficher"
exit
fi
if [ -n "$2" ] && [ -d "$2" ] ; then
secondLS=$(ls $2)
echo $2 :
echo $secondLS
else
echo "Argument n°2 manquant, attendu : nom du dossier à afficher"
exit
fi
if [ -n "$3" ] && [ -d "$3" ] ; then
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
else
echo "Argument n°3 manquant, attendu : nom du dossier à afficher"
exit
fi
Idem je pourrais simplement vérifier s'il s'agit d'une chaine de caractère vide ou fichier
#!/bin/bash
if [ -z "$1" ] || [ -f "$1" ] ; then
echo "Argument n°1 manquant, attendu : nom du dossier à afficher"
exit
else
firstLS=$(ls $1)
echo $1 :
echo $firstLS
fi
if [ -z "$2" ] || [ -f "$2" ] ; then
echo "Argument n°2 manquant, attendu : nom du dossier à afficher"
exit
else
secondLS=$(ls $2)
echo $2 :
echo $secondLS
fi
if [ -z "$3" ] || [ -f "$3" ] ; then
echo "Argument n°3 manquant, attendu : nom du dossier à afficher"
exit
else
thirdLS=$(ls $3)
echo $3 :
echo $thirdLS
fi
Super ! Vous savez maintenant vous servir des conditions !
Vous savez maintenant comment utilisez les conditions en bash !
Vous pouvez aller plus loin dans la configuration si vous le souhaitez, n’hésitez pas à me contacter dans ce cas ou à vous renseigner directement auprès des documentations disponibles sur leur site officiel.
Si vous souhaitez avoir plus d’informations ou si vous avez découvert une coquille sur ce tutoriel, merci de me contacter à l’adresse i.martel@imweb.ovh
v1 - Version initiale