Les différentes boucles du shell script
Contents
1 if
Structure conditionnelle binaire : suivant qu'une condition est vrai ou fausse on exécute un bloc ou on ne l'exécute pas.
if condition ; then instruction fi
Si la condition est vraie, alors instruction (qui peut être un bloc d'instruction) est exécutée.
if condition ; then instruction1 else instruction2 fi
Pour une même construction mais avec plusieurs conditions :
if [confition1] || [condition2] ; then instruction1 else instruction2 fi
Si la condition est vraie, alors instruction1 est exécutée et la seconde est ignorée, sinon c'est instruction2 qui est exécutée et la permière est ignorée.
if condition1 ; then instruction1 elif condition2 then instruction2 fi
elif est équivalent à else if. Ainsi l'instruction2 n'est exécutée que si condition1 et condition2 sont toutes deux vraies en même temps.
2 for
Structure répétitive bornée : boucle dont on connait avant le premier passage le nombre total d'itérations.
for variable in ensemble ; do instructions done
On fait donc varier la variable en lui faisant prendre successivement toutes les valeurs de l'ensemble.
3 while
Structure répétitive tant que la condition est vraie.
while condition ; do instructions done
Boucle dont les instructions sont exécutées tant que l'expression condition est vrai.
Exemple :
nb_cdk=3; i=0; while [ "$i" -lt "$nb_cdk" ];do echo "salut bahan\n" i=$(expr $i + 1) done
ou
nb_cdk=3; declare -i i; i=0 while [ "$i" -lt "$nb_cdk" ];do echo "salut bahan\n" i=$i+1 done
4 until
Structure répétitive jursqu'à ce que la condition soit vraie (i.e. tant qu'elle est fausse).
until condition ; do instructions done
Boucle dont les instructions sont exécutées tant que l'expression condition est fausse.
5 case
Structure conditionnelle à choix multiples : suivant la valeur de l'expression chaine, on peut faire exécuter un large panel d'instructions.
case chaine in motif_1) instruction1 ;; motif_2) instruction2 ;; *) le reste ;; esac
Si la chaine de caractères est semblable au motif_1 (qui est une chaîne d'expansion de chemin, accepte les méta caractères * ?, [], {} et ~) alors l'instruction1 est exécutée.
La chaine peut tout à fait vérifier simultanément plusieurs motifs différents, dans ce cas de figure les instructions (ou blocs d'instructions) correspondantes seront tous exécutés.
6 Tests
Les conditions des structures peuvent être évaluées grace à la commande test.
6.1 Chaînes de caractères
test -z chaine
Renvoie vrai si chaine est vide.
test -n chaine
Renvoie vrai si chaine n'est pas vide.
test chaine_1 = chaine_2
Renvoie vrai si les deux chaînes sont égales.
test chaine_1 != chaine_2
Renvoie vrai si les deux chaînes ne sont pas égales.
6.2 Chaînes numériques
test chaine_1 opérateur chaine_2
Renvoie vrai si les chaînes chaine_1 et chaine_2 sont dans l'ordre relationnel défini par l'opérateur qui peut être l'un parmi ceux du tableau ci-après.
Opérateur | Signification |
---|---|
-eq | = |
-ne | <> |
-lt | < |
-le | <= |
-gt | > |
-ge | >= |
6.3 Fichiers
test condition fichier
Renvoie vrai si le fichier vérifie la condition qui peut être l'une parmi celles décrites dans le tableau ci-après.
Opérateur | Renvoie vrai si |
---|---|
-p | c'est un tube nommé |
-f | fichier ordinaire |
-d | répertoire |
-c | fichier spécial en mode caractère |
-b | fichier spécial en mode bloc |
-r | accès en lecture |
-w | accès en écriture |
-x | accès en exécution |
-s | fichier non vide |
6.4 Autres opérateurs
Il est possible de combiner des tests grâce au parenthésage et à l'utilisation des opérateurs booléens du tableau suivant :
Opérateur | Signification |
---|---|
! | négation |
-a | conjonction (et) |
-o | disjonction (ou) |