Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. shell sous Unix/Linux
  3. Structures conditionnelles et boucles
Extrait - shell sous Unix/Linux Apprenez à écrire des scripts pour administrer votre système
Extraits du livre
shell sous Unix/Linux Apprenez à écrire des scripts pour administrer votre système
2 avis
Revenir à la page d'achat du livre

Structures conditionnelles et boucles

Structures conditionnelles

Les structures conditionnelles permettent de n’exécuter certaines actions que sous certaines conditions. C’est un élément essentiel de tout langage de programmation ! Les scripts shells offrent les mêmes fonctionnalités que les autres langages, avec le mot-clé if. Toutefois, le fonctionnement de ces structures est ici découpé en plusieurs éléments, là où une instruction if dans d’autres langages se suffit à elle-même.

1. Commande test

La commande test est la base du fonctionnement habituel des structures conditionnelles : elle effectue des tests ou des comparaisons et génère un code retour de 0 si le test réussit ou 1 si le test échoue.

Prenons un exemple simple :


$ val="truc" 
$ test "$val" = "truc" 
$ echo $? 
0  
$ test "$val" = "machin" 
$ echo $? 
1
 

Cette commande est capable de comparer ou tester des chaînes de caractères, des nombres entiers (mais ne comprend pas les nombres à virgules) ainsi que des fichiers.

Certains shells (dont Zsh) implémentent cette commande nativement, évitant d’instancier un processus pour chaque test à effectuer ; son fonctionnement reste toutefois le même.

Cette commande peut également être appelée par le caractère [, dans ce cas il faut terminer la liste des arguments par le caractère ]. Les deux syntaxes suivantes sont équivalentes :


test "$val" = "truc" 
[ "$val" = "truc" ]
 

Notez que cette syntaxe garde les contraintes habituelles des commandes exécutées dans un shell : [ est une commande et ] en est un argument à part entière. Par conséquent, ces caractères doivent être entourés d’espaces. La forme suivante provoque une erreur :


["$val" = "machin"]
 

... car le shell verrait un appel à une commande qui serait appelée « [truc », avec les arguments « = » et « machin] ».

Enfin, comme avec n’importe quelle utilisation d’une variable, il est préférable de la protéger avec des guillemets (même si c’est...

Boucles

Les scripts traitent bien souvent des données en grand nombre. Pour cela, il est nécessaire de réaliser des boucles, qui permettent de traiter individuellement chacune des données d’une liste, chacune des lignes d’un fichier, chacune des entrées au clavier, chacun des arguments ou encore chacun des fichiers d’un répertoire ou d’une recherche.

Pour cela, deux types de boucles existent : les boucles for et les boucles while. Tout comme l’instruction if, ces types de boucles existent toutes les deux dans l’écrasante majorité des langages de programmation. Certains langages proposent également d’autres instructions pour les boucles, comme for each (variante de for) et until (variante de while) ; notons par ailleurs que certains shells supportent until, mais cette instruction ne fait pas partie de la norme POSIX.

Tous les exemples d’utilisation de boucles citées ci-dessous sont repris dans le fichier ch5/boucles.sh des éléments téléchargeables.

1. Boucle for

Une boucle for a pour objectif de traiter l’une après l’autre des données qu’on lui fournit. Les valeurs à traiter sont placées dans une variable, qui change de valeur à chaque occurrence de la boucle, jusqu’à ce que toutes les valeurs soient traitées ; à ce moment, la boucle se termine. On est alors plus proche de l’instruction for each des langages qui proposent cette dernière.

La syntaxe de cette boucle en script shell est la suivante :


for <nom de variable> in <liste d'éléments> 
do 
    <instructions> 
done
 

Les spécificités de cette syntaxe sont les suivantes :

  • Le nom de la variable se présente sans le symbole « $ » (comme toute déclaration de variable).

  • Les éléments listés sont à présenter sous la forme d’arguments, séparés par n’importe quel caractère d’espacement (cela signifie qu’une ligne de plusieurs mots sera vue par for comme plusieurs éléments si les espacements ne sont pas protégés).

  • Au sein de la boucle, la variable susnommée contient l’une après l’autre les valeurs de la liste....