Shell Scripting - For Loops
Inhoudsopgave:
- De standaard Bash For Loop
- Loop over snaren
- Lus over een nummerbereik
- Lus over matrixelementen
- De C-stijl Bash voor lus
- Breek en ga door met verklaringen
- Break Statement
- Doorgaan Verklaring
- Bash For Loop Voorbeelden
- Bestanden hernoemen met spaties in de bestandsnaam
- Bestandsextensie wijzigen
- Conclusie
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.donegeeft 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 terminalMobile Network Builder kijkt naar IKEA voor inspiratie VNL wil de manier veranderen waarop mobiele basisstations worden ontworpen en uitgerold op zijn hoofd, om de deur voor dekking op het platteland ... VNL wil de manier waarop mobiele basisstations worden gemaakt en geïnstalleerd op zijn kop zetten, waardoor het economischer wordt om diensten aan te bieden op het platteland in ontwikkelingslanden. Om dit te doen, keek het voor consumentenelektronicafabrikanten en meubelgigant IKEA voor in
In staat zijn om deze markt aan te pakken, moet je beginnen met een blanco vel papier en aannemen dat er geen wegen, geen elektriciteit, geen gekwalificeerd personeel en een ARPU van $ 1- $ 2 zijn, volgens Raj.
Bash tot lus
In scripttalen zoals Bash zijn lussen handig voor het automatiseren van repetitieve taken. Deze tutorial legt de basis uit van de kassa in Bash. De kringloop wordt gebruikt om een bepaalde set opdrachten uit te voeren, zolang de gegeven voorwaarde als onwaar evalueert.
Hoe een bestand regel voor regel in bash te lezen
Wanneer je Bash-scripts schrijft, kom je soms in situaties terecht waarin je een bestand regel voor regel moet lezen. U hebt bijvoorbeeld een tekstbestand met gegevens dat door het script moet worden verwerkt.







