Linux Shell Script Eksempler på BASH 'for' løkken

Hvad skal man vide

  • I en Bash til loop, alle udsagn mellem gør og Færdig udføres én gang for hvert element i en liste eller et nummerområde.
  • Med en stor liste, brug i {list} for at sløjfe mellem et start- og slutpunkt. Brug ellipse til at gentage et fuldt talområde, f.eks. for nummer i {1..10}.
  • For at springe bestemte tal over, skal du tilføje et tredje tal til rækken. Brug f.eks {0..100..10} kun at liste hvert 10. nummer.

I et programmerings- eller scriptsprog tilbyder Bash flere måder at gentage kode - en proces kaldet looping - hvor en til loop gentager en bestemt del af koden. Dette tillader en række kommandoer at køre, indtil en bestemt betingelse er opfyldt. I denne guide viser vi dig, hvordan du skriver en Bash til Løkke.

Sådan går du gennem en liste

Scriptsprog som Bash har lignende programmeringskonstruktioner som andre sprog. For eksempel import parametre få input fra tastaturet og gemme disse input som variabler, som derefter udføre en bestemt handling baseret på værdien af ​​inputparametrene.

Overvej et simpelt eksempel på script med titlen loop.sh:

#!/bin/bash
for nummer i 1 2 3 4 5
gør
ekko $nummer
Færdig
udgang 0

Bash-måden at bruge til loops er noget anderledes end den måde, andre programmerings- og scriptsprog håndterer til sløjfer. Lad os bryde scriptet ned.

I en BASH til loop, alle udsagn mellem gør og Færdig udføres én gang for hvert punkt på listen. I dette eksempel er listen alt, hvad der kommer efter ordet i-tallene 1 2 3 4 5.

Hver gang loopet itererer, indsættes den næste værdi på listen i den variabel, der er angivet efter ordet til. I ovenstående løkke kaldes variablen nummer.

Det ekko erklæring viser information på skærmen. Derfor tager dette eksempel tallene 1 til 5 og udsender hvert nummer et efter et til skærmen:

loop eksempel i et bash-script

Sådan går du i sløjfe mellem et start- og slutpunkt

Problemet med dette loop.sh-script er, at hvis du vil behandle en større liste (f.eks. 1 til 500), vil det tage evigheder at skrive alle tallene. Angiv i stedet et start- og slutpunkt:

#!/bin/bash
for nummer i {1..10}
gør
ekko "$nummer"
Færdig
udgang 0

Reglerne er de samme. Værdierne efter ordet i lav listen for at iterere igennem, og hver værdi i listen placeres i variablen (det vil sige antal), og hver gang loopet itererer, vil udsagn mellem gør og Færdig udføres.

Den største forskel er den måde, listen er dannet på. De krøllede parenteser angiver et område, og området er i dette tilfælde 1 til 10 (de to prikker adskiller begyndelsen og slutningen af ​​et område).

Dette eksempel løber derfor gennem hvert tal mellem 1 og 10 og udsender tallet til skærmen.

Den samme løkke kunne have været skrevet sådan her, med syntaks identisk med det første eksempel:

for nummer i 1 2 3 4 5 6 7 8 9 10

Sådan springer du tal over i et område

Det forrige eksempel viste, hvordan man sløjfer mellem et start- og slutpunkt. Sådan springer du tal i rækken over.

For eksempel, for at sløjfe mellem 0 og 100, men kun vise hvert tiende tal, skal du bruge følgende script til at opnå dette output:

#!/bin/bash
for nummer i {0..100..10}
gør
ekko "$nummer"
Færdig
udgang 0

Reglerne er de samme. Der er en liste, en variabel og et sæt udsagn, der skal udføres mellem gør og Færdig. Listen ser denne gang sådan ud: {0..100..10}.

Det første tal er 0 og sluttallet er 100. Det tredje tal (10) er antallet af elementer på listen, som det vil springe over.

Ovenstående eksempel viser derfor følgende output:

alternativ bash loop output

Et praktisk eksempel

For sløjfer gør mere end at gentage lister med tal. Brug f.eks. output fra andre kommandoer som listen.

Følgende eksempel viser, hvordan man konverterer lydfiler fra MP3 til WAV:

#!/bin/bash
til fil i ./*.mp3
gør
mpg -w ./wavs/"${fil}".wav "$file"
Færdig

Listen i dette eksempel er hver fil med filtypenavnet .MP3 i den aktuelle mappe, og variablen er en fil.

mpg-kommandoen konverterer MP3-filen til WAV. Du skal dog sandsynligvis først installere dette værktøj ved hjælp af en pakkehåndtering.