Wat te weten
- In een Bash voor lus, alle instructies tussen doen en klaar worden één keer uitgevoerd voor elk item in een lijst of nummerreeks.
- Gebruik bij een grote lijst in {list} om te lussen tussen een begin- en eindpunt. Gebruik ellips om een volledig getalbereik te herhalen, bijv. voor nummer in {1..10}.
- Om bepaalde nummers over te slaan, voegt u een derde nummer toe aan het bereik. Gebruik bijvoorbeeld {0..100..10} om alleen elk 10e nummer weer te geven.
In een programmeer- of scripttaal biedt Bash verschillende manieren om code te herhalen – een proces dat looping wordt genoemd – waarbij a voor lus herhaalt een bepaald deel van de code. Hierdoor kan een reeks opdrachten worden uitgevoerd totdat aan een bepaalde voorwaarde is voldaan. In deze handleiding laten we u zien hoe u een Bash . schrijft voor Lus.
Een lijst doorlopen
Scripttalen zoals Bash hebben vergelijkbare programmeerconstructies als andere talen. Importparameters krijgen bijvoorbeeld invoer van het toetsenbord en slaan deze invoer op als variabelen, die vervolgens een bepaalde actie uitvoeren op basis van de waarde van de invoerparameters. Overweeg een eenvoudig voorbeeldscript met de titel loop.sh: #!/bin/bash
voor nummer in 1 2 3 4 5
doen
echo $getal
klaar
uitgang 0
De Bash-manier van gebruik voor loops verschilt enigszins van de manier waarop andere programmeer- en scripttalen omgaan voor lussen. Laten we het script opsplitsen. In een BASH voor lus, alle uitspraken tussen doen en klaar worden één keer uitgevoerd voor elk item in de lijst. In dit voorbeeld is de lijst alles wat na het woord komt in-de nummers 1 2 3 4 5. Elke keer dat de lus wordt herhaald, wordt de volgende waarde in de lijst ingevoegd in de variabele die is opgegeven na het woord voor. In de bovenstaande lus wordt de variabele genoemd nummer. Het echo-statement geeft informatie weer op het scherm. Daarom neemt dit voorbeeld de nummers 1 tot en met 5 en voert elk nummer één voor één uit op het scherm:
Hoe een lus te maken tussen een begin- en eindpunt
Het probleem met dit loop.sh-script is dat als je een grotere lijst wilt verwerken (bijvoorbeeld 1 tot 500), het eeuwen zou duren om alle getallen te typen. Geef in plaats daarvan een begin- en eindpunt op: #!/bin/bash
voor nummer in {1..10}
doen
echo “$getal”
klaar
uitgang 0
De regels zijn hetzelfde. De waarden na het woord in maak de lijst om door te itereren, en elke waarde in de lijst wordt in de variabele geplaatst (dat wil zeggen, nummer), en elke keer dat de lus itereert, worden de instructies tussen doen en klaar worden uitgevoerd. Het belangrijkste verschil is de manier waarop de lijst is samengesteld. De accolades geven een bereik aan en het bereik is in dit geval 1 tot 10 (de twee punten scheiden het begin en het einde van een bereik). Dit voorbeeld loopt daarom door elk nummer tussen 1 en 10 en voert het nummer uit op het scherm. Dezelfde lus had zo kunnen worden geschreven, met een syntaxis die identiek is aan het eerste voorbeeld: voor nummer in 1 2 3 4 5 6 7 8 9 10
Nummers in een bereik overslaan
Het vorige voorbeeld liet zien hoe u een lus kunt maken tussen een begin- en eindpunt. Hier leest u hoe u nummers in het bereik kunt overslaan. Als u bijvoorbeeld tussen 0 en 100 wilt herhalen, maar alleen elk tiende getal wilt weergeven, gebruikt u het volgende script om deze uitvoer te verkrijgen: #!/bin/bash
voor nummer in {0..100..10}
doen
echo “$getal”
klaar
uitgang 0
De regels zijn hetzelfde. Er is een lijst, een variabele en een reeks instructies die moeten worden uitgevoerd tussen doen en klaar. De lijst ziet er dit keer als volgt uit: {0..100..10}. Het eerste cijfer is 0 en het eindcijfer is 100. Het derde cijfer (10) is het aantal items in de lijst dat het zal overslaan. Het bovenstaande voorbeeld geeft daarom de volgende uitvoer weer:
Een praktisch voorbeeld
For-lussen doen meer dan lijsten met getallen herhalen. Gebruik bijvoorbeeld de uitvoer van andere opdrachten als lijst. Het volgende voorbeeld laat zien hoe u audiobestanden converteert van MP3 naar WAV: #!/bin/bash
voor bestand in ./*.mp3
doen
mpg -w ./wavs/”${bestand}”.wav “$bestand”
klaar
De lijst in dit voorbeeld is elk bestand met de extensie .MP3 in de huidige map en de variabele is een bestand. De opdracht mpg converteert het MP3-bestand naar WAV. U moet deze tool echter waarschijnlijk eerst met een pakketbeheerder installeren.