Android

Bash för slinga

Shell Scripting - For Loops

Shell Scripting - For Loops

Innehållsförteckning:

Anonim

Loops är ett av de grundläggande begreppen för programmeringsspråk. Loops är praktiska när du vill köra en serie kommandon om och om igen tills ett visst villkor har uppnåtts.

I skriptspråk som Bash är slingor användbara för att automatisera upprepade uppgifter.

Det finns tre grundläggande slingkonstruktioner i Bash-skript, för loop, medan loop och tills loop.

I den här tutorialen kommer vi att täcka grunderna för slingor i Bash. Vi kommer också att visa dig hur du använder pausen och fortsätter uttalanden för att ändra flödet i en slinga.

Standard Bash For Loop

For-loopen iterates över en lista med objekt och utför den angivna uppsättningen kommandon.

Bash for loop har följande form:

for item in do done

Listan kan vara en serie strängar separerade med mellanslag, ett antal nummer, utgång från ett kommando, en matris och så vidare.

Slinga över strängar

I exemplet nedan kommer loopen att iterera över varje objekt i listan över strängar, och det variabla element kommer att ställas in på det aktuella objektet.

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

Loopen kommer att producera följande utgång:

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

Slinga över ett nummerintervall

Du kan använda sekvensuttrycket för att ange ett intervall med siffror eller tecken genom att definiera en start och slutpunkt för intervallet. Sekvensuttrycket har följande form:

{START..END}

I exemplet nedan kommer slingan att iterera igenom alla siffror från 0 till 3.

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

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

Från Bash 4 är det också möjligt att ange ett steg när man använder intervall. Uttrycket har följande 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

Slinga över arrayelement

Du kan också använda for-loopen för att iterera över en rad element:

I exemplet nedan definierar vi en matris BOOKS och itererar över varje element i matrisen.

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 för loop

Syntaxen för C-stil för loop har följande form:

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

INITIALIZATION delen körs endast en gång när slingan startar. Därefter utvärderas TEST delen. Om det är falskt avslutas for-loopen. Om TEST är sant, utförs kommandon i kroppen för for loop och STEP delen uppdateras.

I följande kod, stjärnor slingan genom att initialisera i = 0 , sedan innan varje iteration kontrollerar om i ≤ 10 . Om det är sant skriver det det aktuella värdet på i och i med 1 ( i++ ) annars slutar slingan.

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

Slingan itereras 1001 gånger och ger följande utgång:

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

Bryt och fortsätt uttalanden

Säkerheterna om brytning och fortsättning kan användas för att kontrollera körningen för slingan.

Break uttalande

Avbrottmeddelandet avslutar den aktuella slingan och överför programkontrollen till uttalandet som följer det avslutade uttalandet. Det används vanligtvis för att avsluta slingan när ett visst villkor är uppfyllt.

I följande exempel använder vi if-satsen för att avsluta exekveringen av slingan när det aktuella itererade objektet är lika med 'litium'.

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ätt uttalandet

Fortsättningsförklaringen lämnar den aktuella iterationen av en slinga och överför programstyrning till nästa iteration av slingan.

I följande exempel uppdateras vi genom ett antal siffror och när det aktuella itererade objektet är lika med '2' fortsätter uttalandet att exekveringen återgår till början av slingan och fortsätter med nästa iteration.

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

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

Exempel på bas

Byt namn på filer med mellanslag i filnamnet

Följande exempel visar hur man använder Bash för loop för att byta namn på alla filer i den aktuella katalogen med ett mellanslag i dess namn genom att ersätta mellanslag till understruk.

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

Låt oss dela upp koden rad för rad:

  • Den första raden skapar en for loop och iterates genom en lista över alla filer med ett mellanslag i dess namn. Uttrycket *\ * skapar listan. Den andra raden gäller för varje objekt i listan och flyttar filen till en ny och ersätter utrymmet med en understreck ( _ ). Delen ${file// /_} använder skalparameterutvidgningen för att ersätta ett mönster inom en parameter med en sträng. done indikerar slutet på loop-segmentet.

Ändrar filändelsen

Följande exempel visar hur man använder Bash för loop för att byta namn på alla filer som slutar med.jpeg i den aktuella katalogen genom att ersätta filändelsen från.jpeg till.jpg.

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

Låt oss analysera koden rad för rad:

  • Den första raden skapar en för-loop och iterates genom en lista över alla filer som slutar med '.jpeg'. Den andra raden gäller för varje objekt i listan och flyttar filen till en ny som ersätter '.jpeg' med '.jpg'. ${file%.jpeg} att ta bort ".jpeg" -delen från filnamnet med hjälp av skalparameterutvidgningen indikerar slutet på loop-segmentet.

Slutsats

Nu bör du ha en god förståelse för hur du använder bash för loop för att iterera genom listor.

bash loop terminal