PowerShell et les boucles For
lundi 27 avril 2020 à 09:30I. Présentation
La boucle "For" est un grand classique des différents langages de scripting et de programmation. Dans cet article, je vous propose de vous familiariser avec les boucles "For" en PowerShell. Dans le même esprit qu'un précédent article au sujet des boucles Do-Until et Do-While en PowerShell. Différents exemples seront intégrés à l'article pour vous aider.
L'objectif d'une boucle "For" est d'exécuter X fois un bloc d'instructions, où le nombre d'exécution de l'état de la condition testée.
II. Comment fonctionne une boucle For ?
En PowerShell, la boucle "For" s'appuie sur la syntaxe suivante :
For(<état initial>;<condition de répétition>;<incrémentation>) { <Si la condition est vraie, on exécute ce bloc d'instructions> } <Si la condition est fausse, la boucle for se termine et le script continue...>
Lorsque l'on utilise une boucle for, on suit la logique suivante : on indique une valeur de départ (état initial), une valeur cible dans la condition de répétition (par exemple la valeur 10) et on incrémente la valeur à chaque tour de boucle (à chaque itération) : on peut incrémenter de 1, de 2, de 10, etc... au choix.
III. Exemples "For" en PowerShell
Pour bien comprendre, c'est toujours mieux d'avoir des exemples, commençons par un premier exemple très simple. Nous verrons ensuite un autre exemple avec une boucle "dynamique" et un troisième exemple avec deux conditions.
- Boucle "For" de base
On peut se dire que l'on part de la valeur "1", et que, tant que la valeur est inférieure à 10, on exécute le bloc d'instruction de la boucle "For", en augmentant de +1 à chaque itération.
Note : Affecter la valeur "0..10" à une variable sert à créer un tableau de valeurs, de 1 à 10.
Ce qui donne :
$valeur = 0..10 For($i=0;$i -lt 10;$i++) { Write-Output "La valeur est $($valeur[$i])" }
Ce qui va donner le résultat suivant :
Cela signifie qu'après la ligne "La valeur est 9", l'exécution du script avec ce poursuivre.
- Boucle "For" basée sur un nombre d'éléments
Imaginons que l'on ait un tableau de chaînes de caractères (string) et que l'on souhaite exécuter une action sur chaque valeur du tableau, sans connaître à l'avance le nombre d'éléments du tableau, on peut s'appuyer sur la propriété Length.
On va définir la variable $langages et lui attribuer des valeurs (cela pourrait être dynamique). Grâce à $langages.Length, nous allons pouvoir faire une boucle qui traite l'ensemble des éléments du tableau. C'est ce que l'on fait habituellement (et plus simplement) avec une boucle ForEach mais on peut le faire aussi avec une simple boucle For, d'où cet exemple.
Ce qui donne :
$langages = @("PowerShell","Python","PHP","JavaScript","C-Sharp") For($i=0;$i -lt $langages.Length;$i++) { Write-Output "Le meilleur langage de programmation est $($langages[$i])" }
Ce qui va donner :
- Boucle "For" à conditions multiple
Au sein d'une boucle "For", on utilise généralement la variable $i pour gérer l'initialisation et l'incrémentation. Si besoin, on peut utiliser deux conditions afin de créer une boucle For à conditions multiple. Pour cet exemple, nous prendrons $i et $j. Je mets en jaune les évolutions au niveau de la syntaxe par rapport à une boucle sur une seule condition.
$valeur = 0..10
For(($i = 0), ($j = 0); $i -lt 10 -and $j -lt 10; $i++,$j++) { Write-Output "Les valeurs sont : i = $($valeur[$i]) - j = $($valeur[$j])" }
Si l'on reprend les deux précédents exemples, avec la valeur de 1 à 10 et le tableau de langages, cela donne :
$valeur = 0..10 $langages = @("PowerShell","Python","PHP","JavaScript","C-Sharp") For(($i = 0), ($j = 0); $i -lt 10 -and $j -lt $langages.Length; $i++,$j++) { Write-Output "$($valeur[$i]) - $($langages[$i])" }
Dès que l'on arrive à la fin du tableau $langages, on sort de la boucle "For" car il faut que $i soit inférieur à 10 ce qui est toujours le cas ET que $j soit inférieur à la longueur du tableau, ce qui n'est plus le cas car nous sommes au bout du tableau.
Si l'on veut que ça continue jusqu'à la fin de $i et $j, il faut remplacer le "-and" par "-or" pour que ça continue tant que l'une ou l'autre des conditions soient vraies. Le résultat sera alors différent :
Les boucles "For" sont simples à utiliser et peuvent s'avérer pratique dans vos scripts, mais n'oubliez pas aussi d'utiliser le bon type de boucle en fonction des circonstances : une boucle Do-While, Do-Until ou encore un ForEach. N'hésitez pas à poster un commentaire si vous avez une question.