Android

Bash til løkke

Shell Scripting - For Loops

Shell Scripting - For Loops

Indholdsfortegnelse:

Anonim

Loops er et af de grundlæggende begreber i programmeringssprog. Loops er praktisk, når du vil køre en række kommandoer igen og igen, indtil en bestemt betingelse er nået.

I scripting-sprog som Bash er løkker nyttige til at automatisere gentagne opgaver.

Der er tre grundlæggende loop-konstruktioner i Bash-scripting, til loop, while loop og indtil loop.

I denne tutorial vil vi dække det grundlæggende om for loops i Bash. Vi vil også vise dig, hvordan du bruger pausen og fortsætter udsagn til at ændre strømmen af ​​en løkke.

Standard Bash For Loop

For-loop-iterenerer over en liste over elementer og udfører det givne sæt kommandoer.

Bash for loop har følgende form:

for item in do done

Listen kan være en række strenge adskilt af mellemrum, et antal numre, output fra en kommando, en matrix og så videre.

Slynge over strenge

I eksemplet nedenfor itererer loopen over hvert element på listen over strenge, og det variable element indstilles til det aktuelle emne.

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

Løkken producerer følgende output:

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

Slynge over et talinterval

Du kan bruge sekvensudtrykket til at specificere et interval af tal eller tegn ved at definere et start og slutpunkt for området. Sekvensudtrykket har følgende form:

{START..END}

I eksemplet nedenfor vil løkken iterere gennem alle tal fra 0 til 3.

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

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

Fra Bash 4 er det også muligt at specificere et trin, når man bruger intervaller. Udtrykket har følgende form:

{START..END..INCREMENT}

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

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

Slynge over matrixelementer

Du kan også bruge for-loop til at iterere over en række elementer:

I eksemplet nedenfor definerer vi en matrix BOOKS og itererer over hvert element i arrayet.

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

C-stil Bash til loop

Syntaks for C-stil til loop har følgende form:

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

INITIALIZATION delen udføres kun én gang, når loopen starter. Derefter evalueres TEST delen. Hvis den er falsk, afsluttes for loop. Hvis TEST er sandt, udføres kommandoer inden i kroppen til for loop, og STEP delen opdateres.

I den følgende kode viser loopen ved at initialisere i = 0 , derefter inden hver iteration kontrollerer, om i ≤ 10 . Hvis det er sandt, udskrives det den aktuelle værdi af i og i med 1 ( i++ ), ellers slutter loopen.

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

Løkken itererer 1001 gange og producerer følgende output:

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

Brud og fortsæt erklæringer

Sætningerne om pause og fortsættelse kan bruges til at kontrollere udførelsen til loop

Break Statement

Bruddeklarationen afslutter den aktuelle sløjfe og overfører programkontrol til det udsagn, der følger den afsluttede erklæring. Det bruges normalt til at afslutte sløjfen, når en bestemt betingelse er opfyldt.

I det følgende eksempel bruger vi if-sætningen til at afslutte udførelsen af ​​løkken, når den nuværende itererede vare er lig med '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!

Fortsæt erklæring

Fortsætningsangivelsen forlader den aktuelle iteration af en løkke og overfører programstyring til den næste iteration af løkken.

I det følgende eksempel itereres vi gennem et antal numre, og når det nuværende itererede emne er lig med '2', vil fortsætningsangivelsen medføre, at eksekveringen vender tilbage til starten af ​​loopen og fortsætter med den næste iteration.

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

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

Eksempler på bash

Omdøbning af filer med mellemrum i filnavnet

Følgende eksempel viser, hvordan man bruger Bash til loop til at omdøbe alle filer i det aktuelle bibliotek med et mellemrum i dets navne ved at erstatte plads til understregning.

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

Lad os fordele koden linje for linje:

  • Den første linje opretter en for-loop og iterates gennem en liste over alle filer med et mellemrum i navnet. Udtrykket *\ * opretter listen. Den anden linje gælder for hvert element på listen og flytter filen til en ny, og erstatter pladsen med en understregning ( _ ). Delen ${file// /_} bruger shell-parameterudvidelsen til at erstatte et mønster i en parameter med en streng. done angiver slutningen af ​​loop-segmentet.

Ændring af filtypenavnet

Følgende eksempel viser, hvordan du bruger Bash til loop til at omdøbe alle filer, der slutter med.jpeg i det aktuelle bibliotek ved at erstatte filtypenavnet fra.jpeg til.jpg.

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

Lad os analysere koden linje for linje:

  • Den første linje opretter en for-loop og itereres gennem en liste over alle filer, der slutter med '.jpeg'. Den anden linje gælder for hvert element på listen og flytter filen til en ny, der erstatter '.jpeg' med '.jpg'. ${file%.jpeg} at fjerne delen '.jpeg' fra filnavnet ved hjælp af udvidet done indikerer slutningen på loop-segmentet.

Konklusion

Nu skal du have en god forståelse af, hvordan du bruger bash til loop til at itereere gennem lister.

bash loop terminal