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é
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
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 ;
).
conditions météorologiques 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é
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 conditions météorologiques 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 conditions météorologiques 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é
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 conditions météorologiques ejemplo basado.
Podemos ver cómo la sintaxis de la Jusqu'à ce que comando es muy equivalente al conditions météorologiques commander. Notez également que, contrairement à for
comando basado, estos comandos buscan un certain condición para persistir (avec conditions météorologiques), 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é
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 conditions météorologiques) 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!