Bash 'Tot' Loop: zelfstudie en voorbeelden

Het gebruik van 'tot' loop in een Bash-script om commando's te herhalen.

Bash (Bourne Again Shell) is een shell-opdrachtprompt en scripttaal in GNU/Linux-besturingssystemen. Het is de standaard shell voor de meeste Linux-distributies.

Zoals de meeste scripttalen, biedt Bash loop-syntaxis om vergelijkbare taken meerdere keren te herhalen. In dit artikel zullen we leren hoe u de tot lus in Bash.

Invoering

De tot loop in Bash wordt gebruikt om commando('s) (uitgevoerde commando's) meerdere keren uit te voeren op basis van de uitvoer van een ander commando('s) (voorwaarde commando's). De uitgevoerde commando's blijven lopen totdat het condition-commando blijft falen (d.w.z. geeft een niet-nulstatus terug. Elk commando in Linux retourneert 0 voor succes en een geheel getal dat niet nul is voor mislukking). Dit is precies het tegenovergestelde van terwijl lus, waarin de uitgevoerde commando's blijven lopen totdat het conditiecommando succesvol is.

Als er meerdere conditieopdrachten zijn, houdt de instructie alleen rekening met de status van de laatste opdracht in de lijst, d.w.z. de lus wordt uitgevoerd totdat de laatste opdracht in de lijst blijft mislukken.

Algemene syntaxis

De algemene syntaxis voor tot lus in Bash is:

tot het klaar is

De opdrachtlijst voor uitvoeren wordt uitgevoerd totdat de laatste opdracht in de lijst met conditieopdrachten mislukt. Zodra de laatste opdracht succesvol is, wordt de lus afgesloten.

Gebruikers kunnen elk uitvoerbaar bestand specificeren in de commandolijsten. Het kunnen standaard Linux-programma's zijn of aangepaste gebruikersprogramma's of scripts. Elke opdracht moet op een nieuwe regel staan ​​of op dezelfde regel worden gescheiden door een puntkomma.

Laten we een paar voorbeelden bekijken.

Looping tot een variabele een bepaalde waarde heeft: De volgende lus wordt uitgevoerd tot de waarde van de variabele x is 10.

x=0 tot [[ $x -eq 10 ]] doe echo $x ((x++)) klaar

In elke iteratie controleren we of de waarde van x 10 is. De waarde wordt gecontroleerd met behulp van de test opdracht. [[ Uitdrukking ]] is de syntaxis voor het testcommando (Zie man test).

dan binnen in de doe...klaar blok, drukken we gewoon de waarde van x af en verhogen deze. De lus wordt afgesloten zodra het condition-commando succesvol is, d.w.z. wanneer $x is gelijk aan 10.

Opmerking: De indexvariabele die in de lus 'tot' moet worden gebruikt, moet worden geïnitialiseerd vóór de lus 'tot' of in de conditie-opdrachten, in tegenstelling tot de lus for, waarmee een variabele impliciet kan worden geïnitialiseerd.

Met meerdere voorwaardecommando's: De volgende lus maakt 5 mappen met de naam dir0, dir1, ... dir4.

z=0 tot echo "Hallo" echo "Dag" [[ $z -eq 5 ]] do echo "Dir$z maken..." mkdir dir$z ((z++)) klaar

De eerste commando's echo "Hi" en echo "Bye" worden één keer volledig uitgevoerd; hun succes of falen heeft geen enkele invloed op hoe lang de lus zal lopen.

Vervolgens wordt het testcommando voor het controleren van de waarde van variabele z uitgevoerd. Totdat dit commando blijft mislukken, d.w.z. totdat de waarde van z 5 is, blijven de conditiecommando's en uitgevoerde commando's op volgorde lopen. Hier zal het voor elke iteratie eerst de 2 echo-opdrachten in conditie uitvoeren en vervolgens de 3e conditie-opdracht controleren op de waarde van z. Als het geen 5 is, gaat het de lus in en voert het de gegeven opdrachten uit.

Pauze en doorgaan

Break Statement voor voorwaardelijke exit

We kunnen ook de voorwaardelijke verklaring gebruiken als binnen de lus. De als verklaring kan worden gebruikt met a pauze een statement, voor een voorwaardelijke exit uit de lus.

x=0 tot [[ $x -eq 10 ]] do if [[ $x -eq 5 ]] breek fi echo $x ((x++)) gedaan

De bovenstaande tot-lus zal getallen van 0 tot 4 afdrukken. Wanneer de waarde van i 5 is, zal deze uit de lus breken. Dit is met name handig wanneer een lus moet worden verlaten wanneer een opdracht een specifieke uitvoer geeft.

Doorgaan met instructie om een ​​iteratie voorwaardelijk over te slaan

Bash heeft ook een doorgaan instructie om het resterende deel van een iteratie in een lus over te slaan als aan een bepaalde voorwaarde is voldaan.

x=0 tot [[ $x -eq 10 ]] doen als [[ $x -eq 5 ]] doorgaan fi echo $x ((x++)) gedaan

De bovenstaande lus drukt getallen van 0 tot 10 af, behalve 5, omdat tijdens de iteratie van x=5 er is een continue-instructie, die de rest van de code in de lus aan het begin overslaat met de iteratie van x=6.

Loops gebruiken: scripts en opdrachtregel

De loop-syntaxis kan rechtstreeks in de Bash-shell worden gebruikt of vanuit een uitvoerbaar shell-scriptbestand. Gelijkwaardig aan voor en terwijl lussen, een keer tot lussyntaxis wordt ingevoerd op de shell, gaat de shell door met de prompt om de gebruiker door te laten gaan met de opdrachten die moeten worden herhaald.

Of anders kan de gebruiker dit opslaan in een scriptbestand en het scriptbestand uitvoeren.

De #!/bin/bash aan het begin specificeert de interpreter die moet worden gebruikt wanneer het bestand wordt uitgevoerd. Hoewel Bash tegenwoordig de meest gebruikte shell is, geven sommige gebruikers de voorkeur aan shells zoals zsh, die moet worden opgegeven in plaats van bash aan het begin van dit bestand.

Uitvoerrechten geven voer voor dit bestand uit:

chmod +x test.sh

Eindelijk, om het bestand uit te voeren, loop:

./test.sh

Gevolgtrekking

De tot loop is een andere belangrijke functie in Bash-scripting. Het is met name van belang in complexe scripts wanneer wordt verwacht dat een bepaalde set programma's de foutstatus retourneert en sommige andere commando's moeten worden uitgevoerd om de fout te loggen, fouten in detail weer te geven of gewoon een aantal alternatieve programma's uit te voeren.