Les différentes boucles du shell script

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

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)