BASH-programmering

Geneste lus in Bash-scriptvoorbeelden

Geneste lus in Bash-scriptvoorbeelden

Bij programmeren of scripten is de lus een van de meest elementaire en krachtige concepten. Een lus voert bepaalde taken uit totdat aan de opgegeven voorwaarden is voldaan. Elke programmeer- of scripttaal heeft verschillende manieren om het concept te implementeren.

Bekijk in deze handleiding de geneste lus in bash-scripting.

Geneste lus

Een lus voert per definitie bepaalde taken uit totdat aan de voorwaarden is voldaan. Wat als de taak het uitvoeren van een lus omvat?? Dit is het concept van een geneste lus. Een lus binnen een lus.

Dit is de basisstructuur van een lus.

terwijl (voorwaarde)
# iets

Hier blijft de while-lus de taken uitvoeren die in het blok zijn gedeclareerd, zolang aan de voorwaarde wordt voldaan. In het geval van een geneste while-lus, ziet de structuur er als volgt uit:.

# Hoofdlus
terwijl (voorwaarde)
# geneste lus
while(voorwaarde)
# iets

In theorie kunnen geneste lussen oneindig diep gaan. In veel situaties kunnen geneste lussen de perfecte oplossing zijn.

Loop in bash-script

Bash is een krachtige scripttaal. Er zijn verschillende lusstructuren in de bash. De meest populaire zijn voor, terwijl en tot loops. Als je al bekend bent met programmeren in C/C++, dan zal de syntaxis er zeker ongeveer hetzelfde uitzien.

Voor lussen

For loop is een van de meest voorkomende en veelzijdige uitvoervormen, enz. De structuur van loops in bash-scripting. De structuur lijkt ook veel op de for-lus in C/C++.

De structuur van for-lus in bash is als volgt:.

for ((initialiseren; voorwaarde; verhogen)); Doen
# iets
gedaan

De structuur is zeer zelfverklarend. De initialisatiesectie is niet verplicht. De voorwaarde en toename hebben echter een hogere prioriteit.

Laten we het in actie brengen. Hier is een heel simplistisch bash-script dat for loop implementeert.

voor ((i = 0 ; i < 5 ; i++)); do
echo "hallo wereld"
gedaan

Het is ook mogelijk om lijst/bereik als lusvoorwaarde te gebruiken. Het is vooral handig als u werkt met een lijst met bestanden, nummerreeksen, arrays, opdrachtuitvoer, enz. De structuur ziet er ongeveer zo uit:.

voor item in ; Doen
# iets
gedaan

Het volgende script zal bijvoorbeeld vijf keer "hallo wereld" afdrukken.

voor i in 1... 5; Doen
echo "hallo wereld"
gedaan

Wat als we moeten werken met de inhoud van een directory?? In het volgende voorbeeld zal het script alle bestanden in de map /usr/bin . afdrukken.

voor i in /usr/bin/*; Doen
echo $i
gedaan

Wat moeten we nu doen om een ​​geneste for-lus te krijgen?? Het is gewoon een voor lus in een andere. Hier is een geneste for-lus met behulp van het vorige voorbeeld.

voor ((i = 0 ; i < 3 ; i++)); do
voor((j = 0 ; j < 2 ; j++)); do
echo "hallo wereld"
gedaan
gedaan

De uitvoer zal 6 keer "hallo wereld" zijn. De buitenste lus wordt drie keer uitgevoerd, de binnenste lus twee keer.

While-lussen

De while-lus is een andere populaire en intuïtieve lus die beschikbaar is in bash-scripting. De syntaxis ziet er als volgt uit:.

terwijl ; Doen
# iets
gedaan

In het volgende voorbeeld zal het script vijf keer "hallo wereld" afdrukken.

aantal=1
terwijl [ $num -le 5 ]; Doen
echo "hallo wereld"
aantal=$(($aantal+1))
gedaan

Hoe zou het eruit zien om een ​​geneste while-lus te hebben?? Hier is een eenvoudig voorbeeld.

aantal_a=1
aantal_b=1
terwijl [ $num_a -le 5 ]; Doen
terwijl [ $num_b -le 5 ]; Doen
echo "hallo wereld"
aantal_b=$(($num_b+1))
gedaan
aantal_a=$(($num_a+1))
gedaan

Tot lussen

Als je een programmeerachtergrond hebt in C/C++, dan ben je bekend met de do-while-lus. Helaas heeft bash zoiets niet. Echter, totdat de lus op een vergelijkbare manier werkt. De syntaxis ziet er ook vrij hetzelfde uit.

tot [ ]; Doen
# iets
gedaan

Het verschil tussen de while en totdat de lus de testconditie is. Zolang de testconditie waar is, blijft een while-lus lopen. Een tot-lus blijft echter alleen lopen als de voorwaarde onwaar is.

Hier is een snel voorbeeld van de while-lus. Het zal de tafel van vermenigvuldiging van 2 . afdrukken.

aantal_a=1
tot [ $num_a -gt 10 ]; Doen
echo $(($num_a * 2))
aantal_a=$(($num_a+1))
gedaan

Lusonderbreking

In bepaalde situaties, als aan bepaalde voorwaarden wordt voldaan, wordt het uitvoeren van de rest van de lus overbodig. Lusonderbrekingen zijn een interessante functie waarmee u onder een bepaalde voorwaarde uit de lus kunt breken. Het is belangrijker voor geneste lussen, want hoe hoger de lussen, hoe meer bronnenverbruik en inefficiëntie.

Hier stopt de volgende for-lus met uitvoeren zodra deze de voorwaarde bereikt:.

voor ((i=1;i<=100;i++)); do
echo $i
als [ $i -eq 10 ]; dan
breken
fi
gedaan

Bekijk hoe je de while-lus kunt doorbreken voor een uitgebreide uitleg en demonstratie van loop-breaks.

Laatste gedachten

Een geneste lus is een eenvoudig en krachtig concept om te begrijpen en te implementeren. Hopelijk kon deze gids het concept beschrijven en demonstreren.

Geïnteresseerd in meer bash-scriptinghandleidingen? Bekijk de volgende handleidingen.

  • Bash oneindige lus
  • Bash-script gebruikersinvoer
  • Bash-functie die array retourneert

Veel computerplezier!

Gratis en open source game-engines voor het ontwikkelen van Linux-games
Dit artikel behandelt een lijst met gratis en open source game-engines die kunnen worden gebruikt voor het ontwikkelen van 2D- en 3D-games op Linux. E...
Shadow of the Tomb Raider voor Linux-zelfstudie
Shadow of the Tomb Raider is de twaalfde toevoeging aan de Tomb Raider-serie - een actie-avonturengame-franchise gemaakt door Eidos Montreal. De game ...
Hoe FPS te verhogen in Linux?
FPS staat voor Beelden per seconde. De taak van FPS is om de framesnelheid te meten bij het afspelen van video's of speluitvoeringen. In eenvoudige wo...