La structure de contrôle : if
La structure de contrôle conditionnelle if permet d’effectuer une action en fonction d’une expression logique.
Syntaxe 1
1 2 3 4 | if cmd then instructions; fi |
Dans cette première syntaxe, si la commande cmd se passe bien (retourne la valeur 0) alors les instructions qui se trouvent après le mot clé then sont exécutées.
Syntaxe 2
1 2 3 4 5 6 | if cmd then instructions; else instructions; fi |
Dans cette deuxième syntaxe, si la commande cmd se passe bien (retourne la valeur 0) alors les instructions qui se trouvent après le mot clé then sont exécutées sinon ce sont les instructions qui se trouvent après le mots clé else qui sont exécutées.
Syntaxe 3
1 2 3 4 5 6 7 8 9 | if cmd1 then instructions1; elif cmd2 then instructions2; else instructions4; fi |
Dans cette troisième syntaxe, si la commande cmd1 se passe bien (retourne la valeur 0) alors les instructions1 qui se trouvent après le mot clé then sont exécutées, sinon, si la commande cmd2 se passe bien (retourne la valeur 0) alors ce sont les instructions2 qui sont exécutées; Sinon exécutions des instructions4.
Syntaxe 4
1 2 3 4 5 6 7 8 9 10 11 12 | if cmd then instructions; elif cmd then instructions; elif cmd then instructions; else instructions; fi |
Le fonctionnement reste le même que dans la syntaxe 3. Mais on a ajouté une ligne elif cmd. Il est possible d’en rajouter autant que nécessaire. Attention cependant à garder un code lisible et compréhensible.
Syntaxe avec l’opérateur logique OU
1 2 3 4 | if cmd || cmd2 then instructions; fi |
Dans cette syntaxe, nous utilisons l’opérateur logique OU. Ce dernier est représenté par la séquence de caractères ||.La condition if sera vérifier si l’une des commandes cmd ou cmd2 retourne sans erreur (code retour 0).
Syntaxe avec l’opérateur logique ET
1 2 3 4 | if cmd && cmd2 then instructions; fi |
Dans cette syntaxe, nous utilisons l’opérateur logique ET. Ce dernier est représenté par la séquence de caractères &&. La condition if sera vérifier si les commandes cmd et cmd2 retourne la valeur vrai (code retour 0).
Exemples
Comparer le contenu d’une variable avec une chaîne de caractères
Nous souhaitons ici comparer le contenu de la variable $var avec la chaîne de caractères « bonjour » et afficher ok sur la sortie standard si ces dernières sont identiques. Voici à quoi ressemble notre code :
1 2 3 4 | if [ $var = "bonjour" ] then echo "ok"; fi |
Comparer le contenu d’une variable avec un entier
Nous souhaitons comparer le contenu de notre variable avec un entier. Pour cela il est nécessaire d’utiliser le mot clé -eq. Voici à quoi ressemble notre code si nous comparons la variable $var à l’entier 5.
1 2 3 4 5 6 | if [ $var -eq 5 ] then echo "var est égale à 5"; else echo "var ne vaut pas 5"; fi |
Exploiter le résultat de la commande grep
Dans cet exemple nous utilisons le fichier /etc/passwd qui contient les informations relatives aux comptes utilisateurs existants sur le système, nous faisons appelle à la commande grep pour rechercher si romain est présent ou non dans ce fichier. Suivant la valeur de retour de grep (valeur de retour : 0 ou 1) alors on affiche un message différent. Voici le code :
1 2 3 4 5 6 | if grep romain /etc/passwd then echo "romain possède un compte"; else echo "romain ne possède pas de compte"; fi |
Vérifier l’existence d’un répertoire
L’option -d permet de tester si un répertoire existe. Dans cet exemple, si le répertoire /mnt n’existe pas alors il est créé.
1 2 3 4 | if [ ! -d /mnt ] then mkdir /mnt fi |
L’opérateur logique OU
L’opérateur logique OU est représenté par la séquence de caractères ||. Dans cet exemple si la variable $var est égale à 4 ou 5 alors l’instruction sera réalisée (la chaîne ok sera affichée sur la sortie standard). Voici le code source :
1 2 3 4 | if [ $var -eq 5 ] || [ $var -eq 4 ] then echo ok fi |
L’opérateur logique ET
L’opérateur logique ET est représenté par la séquence de caractères &&. Dans cet exemple, si la variable $USER est egale à root et si la variable $var est égale à 5 alors la condition est vérifiée, l’instruction echo ok est alors réalisée, la chaîne ok est affichée sur la sortie standard. Voici le code source de l’exemple :
1 2 3 4 | if [ $USER = 'root' ] && [ $var -eq 5 ] then echo ok fi |
Intervalle numérique
Si la variable $val est inférieure à 127 et supérieure à 0 alors la condition est vérifiée.
1 2 3 4 | if [ $val -lt 127 ] && [ $val -gt 0 ] then echo "La variable val est comprise entre 0 et 127" fi |
Chaînes de caractères différentes
Le mot clé != permet de comparer deux chaînes et retourne vrai (code retour 0) si elles sont différentes. Dans l’exemple ci-dessous nous vérifions que la variable $USER ne soit pas égale à root, dans ce cas la condition est vérifiée. Voici le code :
1 2 3 4 | if [ $USER != 'root' ] then echo "La variable $USER n'est pas égale à root" fi |
Entiers différents
Pour vérifier que deux entiers soient différents, il faut utiliser le mot clé -ne (not egal). Dans l’exemple ci-dessous la condiftion est vérifiée lorsque la variable $var n’est pas égale à 6.
1 2 3 4 | if [ $var -ne 6 ] then echo "la variable $var n'est pas égale à 6" fi |
Vérifier si un fichier est existant
Dans l’exemple ci-dessous la condition est vérifiée lorsque le fichier /etc/passwd existe.
1 2 3 4 | if [ -f /etc/passwd ] then echo "Le fichier existe" fi |
Tester si une chaîne est vide
Pour tester si une chaîne est vide nous utilisons dans cet exemple l’option -z. La condition est vérifiée si la variable $var contient une chaîne vide.Voici le code source :
1 2 3 4 | if [ -z $var ] then echo "variable $var vide" fi |
Vérifier si un fichier est accessible en lecture
Pour vérifier si un fichier est lisible, il est nécessaire d’utiliser l’option -r. Exemple :
1 2 3 4 | if [ -r /etc/passwd ] then echo "le fichier /etc/passwd est accessible en lecture" fi |
Vérifier si un fichier est accessible en écriture
Pour vérifier si un fichier est écriture (afin de savoir si il est modifiable) vous pouvez utiliser l’option l’option -w. Exemple :
1 2 3 4 | if [ -w /etc/passwd ] then echo "le fichier /etc/passwd est accessible en écriture" fi |
Bonjour, je crois qu’il faut un ; a la fin de la ligne comportant le if (tout au moins pour le cas suivant:
if [ 1 -eq 0 ]; then echo « 1 »; else echo « 2 »; fi
Cordialement
Serge