Bash 'While'-lus: zelfstudie en voorbeelden

'while'-lus gebruiken in Bash-scripting 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 terwijl lus in Bash.

Invoering

De terwijl 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 zullen blijven lopen totdat de condition-opdracht succesvol is uitgevoerd (d.w.z. de status 0 retourneert. Elke opdracht in Linux retourneert 0 voor succes en een geheel getal dat niet nul is voor mislukking).

Als er meerdere voorwaarde-opdrachten 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 met succes wordt uitgevoerd.

Algemene syntaxis

De algemene syntaxis voor terwijl lus in Bash is:

terwijl doe klaar

De lijst met opdrachten voor uitvoeren blijft actief totdat de laatste opdracht in de lijst met opdrachten voor voorwaarden succesvol is uitgevoerd en eindigt met status 0. In de iteratie, wanneer de laatste opdracht voor de voorwaarde mislukt, wordt de lus afgesloten.

De gebruiker kan 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 niet gelijk aan 10.

x=0 while [[ $x -ne 10 ]] doe echo $x ((x++)) gedaan

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). Hier omdat we de . gebruiken -ne operator (wat staat voor 'niet gelijk aan'), het testcommando retourneert 0, d.w.z. succes, als de waarde van x niet 10 is, en het retourneert een waarde die niet nul is, d.w.z. mislukking als de waarde van x 10 is.

dan binnen in de doe...klaar blok, drukken we de waarde van x af en verhogen deze. Zodra de waarde van x 10 is, retourneert het testcommando de status niet-nul en wordt de lus afgesloten.

Opmerking: De indexvariabele die in de while-lus moet worden gebruikt, moet worden geïnitialiseerd vóór de while-lus of in de condition-opdrachten, in tegenstelling tot de for-lus, waardoor 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 while echo "Lijst met bestanden:" ls -l [[ $z -ne 5 ]] do echo "Dir$z maken..." mkdir dir$z ((z++)) klaar

Eerste commando's echo "Lijst met bestanden:" en ls -l zal een keer volledig worden 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. Tot de waarde van z geen 5 is, retourneert het testcommando de successtatus en daarom blijft de lus lopen. De conditie-commando's en uitgevoerde commando's blijven op volgorde lopen. Hier zal het voor elke iteratie eerst het echo-commando en het ls-commando in condition uitvoeren en vervolgens de 3rd condition-opdracht controleert 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 statement, voor een voorwaardelijke exit uit de lus.

x=0 while [[ $x -ne 10]] do if [[ $x -eq 5 ]] break fi echo $x ((x++)) gedaan

De bovenstaande while-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 statement, om het resterende deel van een iteratie in een lus over te slaan als aan een bepaalde voorwaarde is voldaan.

x=0 while [[ $x -ne 10 ]] do if [[ $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 terwijl 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 de gebruiker kan dit in een scriptbestand opslaan 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 terwijl lus, vergelijkbaar met voor en tot loops zijn een belangrijke functie in Bash-scripting. While-lus heeft een soortgelijk gebruik als de lus tot, behalve dat het wordt gebruikt om alternatieve opdrachten/programma's uit te voeren wanneer een bepaald programma slaagt. Dit vindt vaak zijn nut in geavanceerde netwerkscripts, systeemonderhoudsscripts, enz.