Skip to main content

Linux Shell Script Voorbeelden van de BASH 'voor' Loop

PHP Syntax (April 2025)

PHP Syntax (April 2025)
Anonim

BASH (wat staat voor Bourne Again Shell) is een scriptingtaal die wordt gebruikt door de meeste Linux- en UNIX-gebaseerde besturingssystemen.

U kunt BASH-opdrachten achter elkaar in een terminalvenster uitvoeren of u kunt de opdrachten aan een tekstbestand toevoegen om een ​​shellscript te maken.

Het mooie van het schrijven van shellscripts is dat je ze steeds opnieuw kunt uitvoeren. Stel u bijvoorbeeld voor dat u een gebruiker aan een systeem moet toevoegen, hun rechten moet instellen en hun startomgeving moet beheren. U kunt de opdrachten op een vel papier noteren en ze uitvoeren terwijl u nieuwe gebruikers toevoegt of u kunt een enkel script schrijven en parameters in dat script invoeren.

Scripttalen zoals BASH hebben vergelijkbare programmeerconstructies als andere talen. U kunt bijvoorbeeld importparameters gebruiken om invoer van het toetsenbord te krijgen en deze als variabelen op te slaan. U kunt vervolgens het script een bepaalde actie laten uitvoeren op basis van de waarde van de invoerparameters.

Een belangrijk onderdeel van elke programmeertaal en scripttaal is de mogelijkheid om hetzelfde stuk code steeds weer opnieuw uit te voeren.

Er zijn een aantal manieren om code te herhalen (ook wel loops genoemd). In deze gids wordt u getoond hoe u een "voor" -lus schrijft.

EEN voor loop herhaalt een bepaald gedeelte van de code steeds opnieuw. Ze zijn handig, zodat een reeks commando's kan blijven draaien totdat aan een bepaalde voorwaarde is voldaan, waarna ze zullen stoppen.

In deze gids worden vijf manieren getoond om de for-lus te gebruiken in een BASH-script.

Voordat u begint

Voordat u aan de slag gaat met de voorbeelden van de for-lus, moet u een terminalvenster openen en deze stappen volgen:

  1. invoeren mkdir scripts (lees hier meer over mkdir).

  2. invoeren cd-scripts (dit verandert de map in scripts ).

  3. invoeren nano examplen.sh (waar n is het voorbeeld waar je aan werkt).

  4. Voer het script in.

  5. druk op CTRL + O opslaan en CTRL + X verlaten.

  6. Rennen bash examplen.sh (opnieuw, met n het voorbeeld zijn waarmee je werkt).

Hoe door een lijst te lopen

#! / bin / bashvoor nummer in 1 2 3 4 5doecho $ numberdoneexit 0

De BASH manier om "voor" loops te gebruiken is enigszins anders dan de meeste andere programmeer- en scriptingtalen met "for" loops. Laten we het script breken.

In een BASH "voor" lus alles, de uitspraken tussen do en gedaan worden één keer uitgevoerd voor elk item in de lijst.

In het bovenstaande voorbeeld is de lijst alles wat achter het woord komt in (d.w.z. 1 2 3 4 5).

Telkens wanneer de lus wordt herhaald, wordt de volgende waarde in de lijst ingevoegd in de variabele die achter het woord is opgegeven "voor" . In de bovenstaande lus wordt de variabele aangeroepen aantal .

De echo-instructie wordt gebruikt om informatie op het scherm weer te geven.

Daarom neemt dit voorbeeld de nummers 1 t / m 5 en geeft deze één voor één weer naar het scherm:

  • 1
  • 2
  • 3
  • 4
  • 5

Hoe om te lussen tussen een begin- en eindpunt

Het probleem met het bovenstaande voorbeeld is dat als u een grotere lijst (bijvoorbeeld 1 tot 500) wilt verwerken, het eeuwen zou duren voordat alle getallen eerst werden getypt.

Dit brengt ons bij het tweede voorbeeld dat laat zien hoe een start- en eindpunt te specificeren:

#! / bin / bashfor nummer in {1..10} doecho "$ number" doneexit 0

De regels zijn in principe hetzelfde. De waarden na het woord " in" maak de lijst op om te itereren en elke waarde in de lijst wordt geplaatst in de variabele (d.w.z. het nummer), en elke keer dat de lus itereert, worden de statements tussen do en gedaan worden uitgevoerd.

Het grootste verschil is de manier waarop de lijst wordt gevormd. De accolades {} duiden in feite een bereik aan en het bereik is in dit geval 1 tot 10 (de twee stippen scheiden het begin en het einde van een bereik).

Dit voorbeeld loopt daarom door elk getal tussen 1 en 10 en voert het nummer als volgt uit naar het scherm:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Dezelfde lus zou zo kunnen zijn geschreven, met syntaxis identiek aan het eerste voorbeeld:

voor nummer in 1 2 3 4 5 6 7 8 9 10

Nummers in een bereik overslaan

In het vorige voorbeeld is te zien hoe u kunt doorlopen tussen een begin- en eindpunt, dus nu bekijken we hoe u cijfers in het bereik overslaat.

Stel je voor dat je een lus wilt maken tussen 0 en 100 maar alleen elk tiende nummer wilt laten zien. Het volgende script laat zien hoe je dat precies doet:

#! / bin / bashfor nummer in {0..100..10} doecho "$ number" doneexit 0

De regels zijn in principe hetzelfde. Er is een lijst, een variabele en een set uitspraken die tussen moeten worden uitgevoerd do en gedaan . De lijst ziet er deze keer als volgt uit: {0..100..10}.

Het eerste nummer is 0 en het eindnummer is 100. Het derde cijfer (10) is het aantal items in de lijst dat wordt overgeslagen.

Het bovenstaande voorbeeld geeft daarom de volgende uitvoer weer:

  • 0
  • 10
  • 20
  • 30
  • 40
  • 50
  • 60
  • 70
  • 80
  • 90
  • 100

Een traditionelere lus

De BASH-manier van schrijven voor loops is enigszins vreemd in vergelijking met andere programmeertalen.

U kunt echter een for-lus schrijven in een vergelijkbare stijl als de C-programmeertaal, zoals deze:

#! / bin / bashfor ((number = 1; number <100; number ++)) {if (($ number% 5 == 0)) thenecho "$ number is divisible by 5" fi} exit 0

De lus start door het variabele getal in te stellen op 1 (nummer = 1 ). De lus blijft itereren terwijl de waarde van een getal kleiner is dan 100 ( nummer <100 ). De waarde van aantal wijzigingen door er na elke iteratie 1 toe te voegen ( nummer ++ ).

Alles tussen de accolades wordt uitgevoerd door elke iteratie van de lus.

Het bit tussen de accolades controleert de waarde van a aantal , verdeelt het met 5 en vergelijkt de rest met 0. Als de rest 0 is, dan is het nummer deelbaar door 5 en wordt vervolgens op het scherm weergegeven.

Bijvoorbeeld:

  • 5 is deelbaar door 5
  • 10 is deelbaar door 5
  • 15 is deelbaar door 5

Als u de stapgrootte van de iteratie wilt wijzigen, kunt u het te wijzigen aantal ++ -gedeelte wijzigen number = aantal +2 , number = aantal +5 of nummer = nummer +10 enz.

Dit kan verder worden teruggebracht tot nummer + = 2 of nummer + = 5 .

Een praktisch voorbeeld

For loops kunnen meer doen dan alleen cijferlijsten herhalen. U kunt de uitvoer van andere opdrachten feitelijk als de lijst gebruiken.

Het volgende voorbeeld laat zien hoe u audiobestanden converteert van MP3 naar WAV:

#! / Bin / bashvoor bestand in ./*.mp3dompg -w ./wavs/"${file}".wav "$ file" done

De lijst in dit voorbeeld is elk bestand met de extensie .MP3 in de huidige map en de variabele is een het dossier .

De mpg commando converteert het MP3-bestand naar WAV. U moet dit echter waarschijnlijk eerst met behulp van uw pakketbeheerder installeren.