Android

Bash voor lus

Shell Scripting - For Loops

Shell Scripting - For Loops

Inhoudsopgave:

Anonim

Lussen zijn een van de fundamentele concepten van programmeertalen. Lussen zijn handig wanneer u een reeks opdrachten steeds opnieuw wilt uitvoeren totdat een bepaalde voorwaarde is bereikt.

In scripttalen zoals Bash zijn lussen handig voor het automatiseren van repetitieve taken.

Er zijn drie basis-lusconstructies in Bash-scripts, voor lus, terwijl lus en tot lus.

In deze tutorial behandelen we de basisprincipes van for loops in Bash. We zullen je ook laten zien hoe je de pauze kunt gebruiken en doorgaan met instructies om de loop van een lus te wijzigen.

De standaard Bash For Loop

De for-lus herhaalt zich over een lijst met items en voert de gegeven set opdrachten uit.

De Bash for-lus heeft de volgende vorm:

for item in do done

De lijst kan een reeks strings zijn, gescheiden door spaties, een reeks getallen, uitvoer van een opdracht, een array, enzovoort.

Loop over snaren

In het onderstaande voorbeeld wordt de lus herhaald over elk item in de lijst met tekenreeksen en wordt het variabele element ingesteld op het huidige item.

for element in Hydrogen Helium Lithium Beryllium do echo "Element: $element" done

De lus geeft de volgende uitvoer:

Element: Hydrogen Element: Helium Element: Lithium Element: Beryllium

Lus over een nummerbereik

U kunt de reeksuitdrukking gebruiken om een ​​bereik van cijfers of tekens op te geven door een begin- en eindpunt van het bereik te definiëren. De reeksuitdrukking heeft de volgende vorm:

{START..END}

In het onderstaande voorbeeld doorloopt de lus alle getallen van 0 tot 3.

for i in {0..3} do echo "Number: $i" done

Number: 0 Number: 1 Number: 2 Number: 3

Vanaf Bash 4 is het ook mogelijk om een ​​toename op te geven bij het gebruik van bereiken. De uitdrukking heeft de volgende vorm:

{START..END..INCREMENT}

for i in {0..20..5} do echo "Number: $i" done

Number: 0 Number: 5 Number: 10 Number: 15 Number: 20

Lus over matrixelementen

Je kunt ook de for-lus gebruiken om een ​​reeks elementen te doorlopen:

In het onderstaande voorbeeld definiëren we een array- BOOKS en herhalen we elk element van de array.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby') for book in "${BOOKS}"; do echo "Book: $book" done

Book: In Search of Lost Time Book: Don Quixote Book: Ulysses Book: The Great Gatsby

De C-stijl Bash voor lus

De syntaxis van de C-stijl voor lus neemt de volgende vorm aan:

for ((INITIALIZATION; TEST; STEP)) do done

Het INITIALIZATION gedeelte wordt slechts eenmaal uitgevoerd wanneer de lus start. Vervolgens wordt het TEST gedeelte geëvalueerd. Als deze onwaar is, wordt de for-lus beëindigd. Als de TEST waar is, worden opdrachten in de body van for loop uitgevoerd en wordt het STEP gedeelte bijgewerkt.

In de volgende code wordt de lus gemarkeerd door i = 0 initialiseren i = 0 vervolgens wordt voor elke iteratie gecontroleerd of i ≤ 10 . Als het waar is, wordt de huidige waarde van i en i met 1 ( i++ ) afgedrukt, anders eindigt de lus.

for ((i = 0; i <= 1000; i++)); do echo "Counter: $i" done

De lus zal 1001 keer itereren en de volgende uitvoer produceren:

Counter: 0 Counter: 1 Counter: 2… Counter: 998 Counter: 999 Counter: 1000

Breek en ga door met verklaringen

De instructies break en continue kunnen worden gebruikt om de uitvoering van de for-lus te regelen.

Break Statement

De instructie break beëindigt de huidige lus en geeft programmabesturing door aan de instructie die volgt op de beëindigde instructie. Het wordt meestal gebruikt om de lus te beëindigen wanneer aan een bepaalde voorwaarde is voldaan.

In het volgende voorbeeld gebruiken we de instructie if om de uitvoering van de lus te beëindigen zodra het huidige iteratie-item gelijk is aan 'Lithium'.

for element in Hydrogen Helium Lithium Beryllium; do if]; then break fi echo "Element: $element" done echo 'All Done!'

Element: Hydrogen Element: Helium All Done!

Doorgaan Verklaring

De instructie continue verlaat de huidige iteratie van een lus en geeft programmabesturing door aan de volgende iteratie van de lus.

In het volgende voorbeeld doorlopen we een reeks getallen en wanneer het huidige iteratie-item gelijk is aan '2', zorgt de instructie continue ervoor dat de uitvoering terugkeert naar het begin van de lus en verder gaat met de volgende iteratie.

for i in {1..5}; do if]; then continue fi echo "Number: $i" done

Number: 1 Number: 3 Number: 4 Number: 5

Bash For Loop Voorbeelden

Bestanden hernoemen met spaties in de bestandsnaam

In het volgende voorbeeld wordt getoond hoe u de Bash for-lus kunt gebruiken om alle bestanden in de huidige map te hernoemen met een spatie in de namen door spatie te vervangen door een onderstrepingsteken.

for file in *\ *; do mv "$file" "${file// /_}" done

Laten we de code regel voor regel opsplitsen:

  • De eerste regel maakt een for-lus en doorloopt een lijst met alle bestanden met een spatie in de naam. De uitdrukking *\ * maakt de lijst. De tweede regel is van toepassing op elk item van de lijst en verplaatst het bestand naar een nieuwe waarbij de spatie wordt vervangen door een onderstrepingsteken ( _ ). Het onderdeel ${file// /_} gebruikt de uitbreiding van de shell-parameter om een ​​patroon binnen een parameter te vervangen door een string. done geeft het einde van het lussegment aan.

Bestandsextensie wijzigen

In het volgende voorbeeld wordt getoond hoe u de Bash for-lus kunt gebruiken om alle bestanden die eindigen op.jpeg in de huidige map te hernoemen door de bestandsextensie te vervangen van.jpeg naar.jpg.

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg" done

Laten we de code regel voor regel analyseren:

  • De eerste regel maakt een for-lus en doorloopt een lijst met alle bestanden die eindigen op '.jpeg'. De tweede regel is van toepassing op elk item van de lijst en verplaatst het bestand naar een nieuwe waarbij '.jpeg' wordt vervangen door '.jpg'. ${file%.jpeg} om het '.jpeg'-gedeelte uit de bestandsnaam te verwijderen met behulp van de uitgevoerde shell-parameteruitbreiding geeft het einde van het lussegment aan.

Conclusie

Inmiddels zou u een goed begrip moeten hebben van het gebruik van de bash voor lus om door lijsten te bladeren.

bash lus terminal