Bucle "Fins a" Bash: tutorial i exemples

Utilitzar el bucle "fins" en un script Bash per fer un bucle sobre les ordres.

Bash (Bourne Again Shell) és un indicador d'ordres de l'intèrpret d'ordres i un llenguatge de script als sistemes operatius GNU/Linux. És el shell predeterminat per a la majoria de distribucions de Linux.

Com la majoria dels llenguatges de script, Bash proporciona sintaxis de bucle per repetir tasques similars diverses vegades. En aquest article, aprendrem a utilitzar el fins que bucle a Bash.

Introducció

El fins que Loop a Bash s'utilitza per executar ordres (ordres executades) diverses vegades en funció de la sortida d'altres ordres (ordres de condició). Les ordres executades continuaran executant-se fins que l'ordre de condició continua fallant (és a dir, retorna un estat diferent de zero. Qualsevol ordre a Linux retorna 0 per a l'èxit i un nombre enter diferent de zero per a la fallada). Això és exactament el contrari mentre bucle, en què les ordres executades continuen executant-se fins que l'ordre de condició té èxit.

Si hi ha diverses ordres de condició, la instrucció considera només l'estat de l'última ordre de la llista, és a dir, el bucle s'executarà fins que l'última ordre de la llista segueixi fallant.

Sintaxi general

La sintaxi general per fins que bucle a Bash és:

fins que estigui fet

La llista d'ordres d'execució s'executarà fins que falla l'última ordre de la llista d'ordres de condició. Un cop l'última ordre té èxit, el bucle surt.

Els usuaris poden especificar qualsevol fitxer executable a les llistes d'ordres. Pot ser programes Linux estàndard o programes d'usuari o scripts personalitzats. Cada comanda hauria d'estar en una línia nova o separada per un punt i coma a la mateixa línia.

Vegem-ne uns quants exemples.

Bucle fins que una variable tingui un valor particular: El següent bucle s'executa fins al valor de la variable x és 10.

x=0 fins que [[ $x -eq 10 ]] faci ressò $x ((x++)) fet

En cada iteració, estem comprovant si el valor de x és 10. El valor s'està comprovant amb el prova comandament. [[ Expressió ]] és la sintaxi de l'ordre de prova (vegeu prova d'home).

Després dins del fer... fet bloc, simplement imprimim el valor de x i l'incrementem. El bucle surt un cop l'ordre de condició té èxit, és a dir, quan $x és igual a 10.

Nota: La variable d'índex que s'utilitzarà en el bucle "fins" s'ha d'inicialitzar abans del bucle "fins" o a les ordres de condició, a diferència del bucle for, que permet inicialitzar una variable de manera implícita.

Amb múltiples ordres de condició: El següent bucle crea 5 directoris anomenats dir0, dir1, ... dir4.

z=0 fins que echo "Hola" echo "Adéu" [[ $z -eq 5 ]] do echo "S'està creant dir$z..." mkdir dir$z ((z++)) fet

Les primeres ordres fan ressò "Hola" i "Adéu" s'executaran una vegada completament; el seu èxit o fracàs no té cap impacte en el temps que durarà el bucle.

Aleshores s'executarà l'ordre de prova per comprovar el valor de la variable z. Fins que aquesta ordre continua fallant, és a dir, fins que el valor de z sigui 5, les ordres de condició i les ordres executades es mantenen en ordre. Aquí, per a cada iteració, primer executarà les 2 ordres d'eco en condicions i després la tercera ordre de condició comprovarà el valor de z. Si no és 5, entra al bucle i executa les ordres donades.

Trenca i continua

Declaració de pausa per a la sortida condicional

També podem utilitzar l'enunciat condicional si dins del bucle. El si La declaració es pot utilitzar amb a trencar una instrucció, per a una sortida condicional del bucle.

x=0 fins que [[ $x -eq 10 ]] fer si [[ $x -eq 5 ]] break fi echo $x ((x++)) fet

El bucle fins anterior imprimirà números del 0 al 4. Aleshores, quan el valor de i sigui 5, sortirà del bucle. Això és especialment útil quan s'ha de sortir d'un bucle quan una ordre dóna una sortida específica.

Continua la declaració per saltar una iteració condicionalment

Bash també té un continuar sentència per saltar la part restant d'una iteració en un bucle si es compleix una condició particular.

x=0 fins que [[ $x -eq 10 ]] fer si [[ $x -eq 5 ]] continua fi echo $x ((x++)) fet

El bucle anterior imprimirà números del 0 al 10, excepte el 5, perquè durant la iteració de x=5 hi ha una instrucció continue, que saltarà la resta del codi en el bucle al començament amb la iteració de x=6.

Ús de bucles: scripts i línia d'ordres

Les sintaxis de bucle es poden utilitzar a l'intèrpret d'ordres Bash directament o des d'un fitxer de script d'intèrpret d'ordres executable. Similar a per i mentre bucles, una vegada a fins que La sintaxi de bucle s'introdueix a l'intèrpret d'ordres, l'intèrpret d'ordres continua l'indicador per permetre que l'usuari continuï les ordres que s'han de reproduir en bucle.

O bé, l'usuari pot desar-ho en un fitxer d'script i executar-lo.

El #!/bin/bash al començament especifica l'intèrpret que s'utilitzarà quan s'executa el fitxer. Tot i que Bash és l'intèrpret d'ordres més utilitzat avui dia, alguns usuaris prefereixen shells com zsh, que s'hauria d'especificar en lloc de bash a l'inici d'aquest fitxer.

Per donar permisos d'execució per a aquest fitxer, executeu:

chmod +x prova.sh

Finalment, per executar el fitxer, correr:

./prova.sh

Conclusió

El fins que el bucle és una altra característica important en els scripts de Bash. Té una importància especial en scripts complexos quan s'espera que un determinat conjunt de programes torni l'estat de fallada i s'han d'executar altres ordres per registrar l'error, mostrar l'error en detall o simplement executar alguns programes alternatius.