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.