Articles

Le Journal Geek

Il y a plusieurs fois dans un script shell où vous souhaitez exécuter à plusieurs reprises une instruction ou un groupe d’instructions jusqu’à ce qu’une condition spécifiée se produise. De plus, vous pouvez exécuter un groupe d’instructions pour chaque élément d’une certaine liste. Le shell fournit trois constructions en boucle pour ces situations : les constructions for, while et until.

La boucle for vous permet de spécifier une liste de valeurs. Un groupe d’instructions est exécuté pour chaque valeur de la liste.

Syntaxe de boucle For

La boucle for dans le shell prend une liste de mots (chaînes) comme argument. Le nombre de mots dans la liste détermine le nombre de fois où les instructions de la boucle for sont exécutées. La syntaxe de la boucle for est la suivante :

for variable in element1 element2 element3 do commands done

où :

  • variable : C’est n’importe quel nom de variable.
  • elements(argument_list): Il peut s’agir de n’importe quelle liste de mots, de chaînes ou de nombres, et il peut être littéral ou généré en utilisant une commande shell ou un métacaractère de ligne de commande shell.commandes
  • : Les commandes peuvent être n’importe quelle commande du système d’exploitation, un programme utilisateur, un script shell ou une instruction shell qui renvoie (produit) une liste.

La valeur de la variable var est définie sur le premier mot de la liste la première fois dans la boucle. La deuxième fois dans la boucle, sa valeur est définie sur le deuxième mot de la liste, et ainsi de suite. La boucle se termine lorsque var a pris chacune des valeurs de la liste d’arguments, à son tour, et qu’il n’y a pas d’arguments restants.

La liste des arguments de la boucle for

La liste des arguments d’une boucle for peut être n’importe quelle liste de mots, de chaînes ou de nombres. Générez la liste d’arguments en utilisant l’une des méthodes suivantes (ou une combinaison de méthodes):

  • Utilisez une liste explicite
  • Utilisez le contenu d’une variable
  • Utilisez des arguments de ligne de commande
  • Utilisez une substitution de commande
  • Utilisez des noms de fichiers dans la substitution de commande

Exemple 1: Boucle For utilisant une Liste explicite pour spécifier des Arguments

Lorsque des arguments sont répertoriés pour une boucle for, ils sont appelés une liste explicite . Une liste explicite est la forme la plus simple d’une liste d’arguments. La boucle est exécutée une fois pour chaque élément de liste. L’exemple suivant est une boucle for utilisant une liste explicite d’éléments:

#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done

La sortie de cette boucle for est:

Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi

Exemple 2: Boucle For utilisant un contenu variable pour spécifier des arguments

Lorsque les arguments sont dans un variable et l’instruction est exécutée, le contenu de la variable est substitué. Dans l’exemple suivant, le texte saisi à l’invite devient la valeur de la variable ENTRÉE. Cette variable représente la liste des arguments de la construction for. Par conséquent, le texte en ENTRÉE est divisé en mots ou en jetons basés sur des espaces blancs.

$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done

$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.

Exemple 3: Boucle For utilisant des Arguments de ligne de commande pour spécifier des Arguments

Dans l’exemple suivant, le texte entré sur la ligne de commande devient la liste d’arguments de la construction for. Par conséquent, le texte de la ligne de commande est divisé en mots ou en jetons basés sur des espaces blancs.

$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done
$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.

Exemple 4 : Boucle For Utilisant la Substitution de commande pour spécifier des Arguments

La syntaxe de substitution de commande dans un shell Bash est la suivante :

for var in `cmd_sub`

L’exemple suivant utilise la sortie de la commande cat comme liste d’arguments.

$ cat fruit1 apple orange banana peachkiwi

$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done

$ ./ex4.shvar contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi

Si le fichier contenant la liste était au format suivant, quel est le résultat de la boucle for.

$ cat fruit3Apple Orange Banana Peach Kiwi

$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done
$ ./ex5.shApple Orange Banana Peach Kiwi

Dans l’exemple ci-dessus, les résultats ne changent pas. La variableFS est un espace blanc, donc un retour chariot et un espace ou un onglet séparent chaque champ du fichier.

Exemple 5: Boucle For utilisant des noms de fichiers dans la Substitution de commandes pour Spécifier des Arguments

Certaines commandes fournissent des noms de fichiers et des noms de répertoires en sortie. Dans l’exemple suivant, le shell remplace la sortie de la commande, ls/etc/p *(/etc/passwd/etc/profileet ainsi de suite), comme liste d’arguments pour la boucle for.

$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done
# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....