Apprêt: Boucles Bash: pour, pendant et jusqu'à

Contenu

La plupart des langages de programmation prennent en charge plusieurs alternatives pour les lignes de code en boucle. Bash prend en charge nativement les boucles « while », boucle’ et les "boucles for"’ plus connu. Cet article présente et analyse les trois.

Quels sont Boucles Bash?

Pour régler ça un peu mieux, nous devrions commencer par la question que sont les boucles. Les boucles sont une construction du langage de programmation, qui permet à un développeur de répéter (En d'autres termes, répéter) certaines parties, la totalité, du code dans cette définition de boucle. Maintenant, c'est facile à régler Boucles Bash comme toute construction de langage de programmation en boucle utilisée dans bash!

Bash prend en charge nativement les boucles basées sur 'for', 'jusqu'à’ y 'pendant'. Chacun d'eux a ses propres avantages, mais vous pouvez déjà vous faire une idée de leur signification juste en regardant l'idiome du mot principal. Par exemple, 'jusqu'à’ conduit à penser naturellement à « faire quelque chose jusqu'à ce que’ et c'est ce que font les boucles bash 'up to'; répéter une certaine quantité de code (la totalité) jusqu'à ce qu'une certaine condition soit remplie.

Équivalent, los bucles 'pendant que’ ils continuent à fonctionner jusqu'à ce qu'une condition ne soit plus vraie. Pour terminer, les 'pour les boucles’ sont répétés, par exemple, un nombre défini de fois, équivalent à la façon dont nous écririons 'pour 70 fois, fais…'. Cela nous aide à comprendre logiquement les fonctionnalités uniques de chaque boucle et à implémenter un code plus lisible..

pour Boucles bash basées

Aux fins de ce poste, nous verrons la nouvelle façon de définir Bash pour les boucles. Une définition un peu plus ancienne et moins moderne de pour boucles en bash peut, par exemple, ressemble à ca: for i in $(seq 1 5); do echo $i; done. Comparons cela à un look plus propre, mieux structuré et moderne. pour cercle:

pour ((i=1;je<=5;je++)); faire écho $i; terminé

Une boucle basée sur Bash pour

C'est simple pour Bash à une ligne basé sur (une définition souvent utilisée dans les cercles Linux / Bash pour conceptualiser un mini-script écrit sur une seule ligne) imprimera les numéros des 1 Al 5 dans l'ordre séquentiel. Nous fixons une valeur de départ pour le i variable ($i) attribuer la valeur 1 au même, comme la première partie de notre pour définition de boucle, terminé par un ; délimiteur.

Ensuite, nous précisons que nous n'en avons qu'un à uploader « Inférieur ou égal à cinq’ par l'utilisation i<=5. Plus tard, nous indiquons ce qui devrait se passer à la fin de chaque tour, et cela augmente la variable i par un, O, dans une abréviation de codage couramment utilisée (inclus dans le langage C ++, par exemple), cela se traduit par i++.

Pour finir, nous spécifions le début de notre code de boucle en utilisant do, En d'autres termes, après avoir terminé notre for définition de boucle, comme toute autre déclaration se terminant, avec ; avant de do. De plus, nous spécifions la fin de notre code de boucle en utilisant done et nous echo (imprimer) la valeur de notre variable je entre lui do et done.

Notez également spécifiquement que le do la clause elle-même ne se termine pas par ;, et cela provoquerait une erreur. Prendre en compte do un préfixe à quoi faire, et c'est plus logique. C'est peut-être l'une des raisons pour lesquelles il est parfois plus propre de mettre les choses dans un script multiligne, étant donné que do c'est peut-être juste le dernier mot sur une ligne.

Même en définissant d'autres types de boucles, nous continuerons à maintenir le do et done clauses, et nous veillerons toujours à terminer notre définition de boucle (En d'autres termes, avant do) avec ;, ainsi que de finaliser la fin de chaque déclaration individuelle au sein de notre do...done définition de boucle avec ;.

Pongamos esto en un pequeño script para ver más claramente cómo pueden funcionar las cosas de esa manera:

#!/bin/bash

for ((i=1;je<=10;i+=2)); do 
  echo $i
done

Un script de bucle basado en Bash for

Después de hacer que el script sea ejecutable con chmod +x test.sh, ejecutamos lo mismo. Se introdujeron algunos pequeños cambios en el guión. Observe cómo esta vez, estamos aumentando la variable i por dos cada vez. Esto se hace usando otra abreviatura de codificación, a savoir i+=2 que se puede leer como incrementar i en dos. Además se puede escribir i=i+2 en el mismo lugar, et ça marche exactement pareil.

Nous voyons que nous commençons dans 1et augmenter dans 2 chaque fois que nous passons par la boucle, se terminant en 9. La raison pour laquelle il se termine par 9 est que la valeur maximale est 10. Pour cela, après que 9 la valeur suivante serait 11, qui est supérieur à 10 et c'est pourquoi il ne s'affiche pas / liens.

Considérez également comment ; a été supprimé après la ligne d'écho. C'est parce qu'il n'est pas nécessaire de terminer la fin d'une instruction s'il y a une situation à la place / caractère de fin de ligne. C'est le cas ici; nous n'avons pas d'autre commande après le echo $i et la ligne se termine immédiatement (des espaces à la fin de la ligne seraient également bien, le principe est simplement de ne pas avoir d'autre commande à moins que cette nouvelle commande n'ait le préfixe (et le précédent terminé) pour ;).

la météo Boucles bash basées

Ensuite, jetons un œil à une boucle bash, en utilisant le même do...done définition de boucle, nous pouvons établir un tandis que la boucle basée sur bash à exécuter tant qu'une condition donnée est vraie.

i=1; tandis que [ $à la 5 ]; faire écho $i; je=$[ je + 1 ]; terminé

Une boucle basée sur Bash tandis que

Dans cet exemple, nous faisons la même chose que notre premier pour exemple de boucle basée. Bien que la définition semble plus complexe (et c'est pourquoi un pour la boucle peut être plus adaptée à ce cas d'utilisation particulier), il est intéressant de voir comment on peut établir un la météo boucle de la même manière.

Ici, nous définissons d'abord notre i variable, manuellement, dans une commande séparée terminée par ;, pour 1. Ensuite, nous avons commencé un la météo boucle où l'on pose une condition, d'une manière très équivalente à la définition d'un if déclaration (il y a un lien à la fin de cet article vers un article sur if déclarations pour plus d'informations), où nous vérifions si le i la variable est inférieure ou égale (-le) après 5.

Après cela, nous avons nos fréquents do...done bloc dans lequel echo notre variable, et par la suite, dans une nouvelle déclaration, manuellement, augmenter la valeur de notre i variable par un dans un calcul mathématique tel que défini par le $[...] Idiomes de calcul Bash. Ensuite, passons en revue un jusqu'à bash en fonction de la boucle

Jusqu'à ce que Boucles bash basées

Armé de ce que nous avons appris jusqu'à présent, maintenant nous pouvons examiner plus facilement ce qui suit Jusqu'à ce que bash basé sur une boucle:

i=1; jusqu'à [ $je -gt 5 ]; faire écho $i; je=$[ je + 1 ]; terminé

Une boucle basée sur bash jusqu'à

Ici, nous cherchons la condition je plus grand que 5 se réaliser. Jusqu'à ce moment (En d'autres termes, un Jusqu'à ce que bucle basado en), imprimiremos (à l'aide de echo) notre variable je y incrementar lo mismo con uno, igual que nuestro anterior la météo ejemplo basado.

Podemos ver cómo la sintaxis de la Jusqu'à ce que comando es muy equivalente al la météo commander. Notez également que, contrairement à for comando basado, estos comandos buscan un certain condición para persistir (avec la météo), o a por un certain condición para comenzar (avec Jusqu'à ce que). Esto además posibilita utilizar otros comandos que pueden devolver una salida equivalente a verdadero / faux, par exemple grep -q:

écho 1 > a
while grep -q '1' ./a; do echo 'yes'; dormir 5; terminé

Verificando un estado verdadero usando grep -q en un bucle Bash basado en while

Aquí sumamos el número 1 dans un fichier appelé uneet vérifier l'existence du numéro 1 à l'intérieur de ce fichier à l'aide d'un grep -q (un grep silencieux). Nous continuons à le faire (En d'autres termes la météo) jusqu'à ce que ce ne soit plus vrai. Même si c'est vrai, nous imprimons le texte Oui et mettez la boucle en pause pendant cinq secondes avec sleep 5. Remarquez comment chaque commande se termine par ; de nouveau.

Après environ 17 secondes, nous interrompons notre script en utilisant CTRL + c, qui est la méthode universelle pour arrêter une procédure en cours dans bash (en même temps que le CTRL + z Plus fort et plus efficace que de suspendre une procédure immédiatement, Mais c'est pour un autre post!)

Fin

Dans ce billet, nous vérifions les boucles 'for', 'tandis que’ y'jusqu'à’ qui sont nativement disponibles dans Bash. Si vous êtes intéressé par plus de bash, jetez un œil aux tests conditionnels dans bash: si, alors, autre, fonctions elif et bash et variables locales.

Prendre plaisir!

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.