der er to typer bash for loops tilgængelige. En ved hjælp af” in ” søgeord med liste over værdier, en anden ved hjælp af C programmering som syntaks.
Denne artikel er en del af vores igangværende bash tutorial serie.dette forklarer begge bash for loop-metoder og giver 12 forskellige eksempler på, hvordan du bruger bash for loop i dine shell-scripts.bogmærke denne artikel til fremtidig reference, da dette er den eneste artikel, du nogensinde har brug for at henvise til, hvordan du bruger bash til sløjfer med eksempler.,
Metode 1: Bash-For-Løkke brug af “i”, og listen over værdier
Syntax:
for varname in listdo command1 command2 ..done
I ovenstående syntaks:
- til, hvis i gør og har gjort er nøgleord
- “liste”, indeholder en liste af værdier. Listen kan være en variabel, der indeholder flere ord adskilt af mellemrum. Hvis listen mangler i for-erklæringen, tager den den positionsparameter, der blev sendt ind i skallen.varname er ethvert Bash-variabelnavn.
i denne form udfører for-sætningen de kommandoer, der er vedlagt i en krop, en gang for hvert element på listen., For eksempel, hvis listen over værdier indeholder 5 elementer, udføres for-løkken i alt 5 gange, en gang for hvert element på listen. Det aktuelle element fra listen gemmes i en variabel “varname” hver gang gennem løkken. Denne” varname ” kan behandles i kroppen af for loop.
Metode 2: Bash-For-Løkken bruger C-lignende syntaks
Den anden form for for-løkken er magen til den for-løkke i “C” programmeringssprog, som har tre udtryk (initialisering, tilstand og updation).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
I ovenstående bash for kommando syntaks,
- Før den første iteration, expr1 er evalueret. Dette bruges normalt til at initialisere variabler for sløjfen.
- alle udsagn mellem do og done udføres gentagne gange, indtil værdien af e .pr2 er sand.
- efter hver iteration af sløjfen evalueres e exppr3. Dette bruges normalt til at forøge en loop tæller.
de følgende 12 eksempler viser, hvordan man bash for sløjfer på forskellige måder.,
statiske værdier for listen efter “in” nøgleord
i det følgende eksempel gives listen over værdier (Mon, Tue, ons, Thu og FRE) direkte efter nøgleordet “in” i bash for loop.
forsigtig: listen over værdier bør ikke adskilles med komma (man, tir, ons, tor, fre). Kommaet vil blive behandlet som en del af værdien. dvs. i stedet for “Mon”, vil den bruge” Mon ” som værdi som vist i eksemplet nedenfor.
forsigtig: listen over værdier bør ikke være vedlagt i et dobbelt citat. (“Man Tir Ons Tor Fre”)., Hvis du vedlægger dobbelt citat, vil det blive behandlet som en enkelt værdi (i stedet for 5 forskellige værdier), som vist i eksemplet nedenfor.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
Variabel til listen efter “i” søgeord
i Stedet for at give de værdier direkte i for-løkken, kan du gemme værdier i en variabel, og bruge variablen i for-løkken efter “i” søgeord, som vist i følgende eksempel.advarsel: som en god praksis skal du altid citere bash-variablerne, når du henviser det. Der er få undtagelser fra denne regel om bedste praksis. Dette er en af dem., Hvis du dobbelt citat variablen i denne For loop, listen over værdier vil blive behandlet som enkelt værdi. Mange mennesker falder i denne fælde. Vær forsigtig og ikke fordoble citere din variabel i for loop.
angiv ikke listen; Hent den fra positionsparametrene
Hvis du ikke angiver nøgleordet “in” efterfulgt af en liste over værdier i bash for loop, vil den bruge positionsparametrene (dvs.de argumenter, der overføres til shell-scriptet).
forsigtig: vær forsigtig, hvis du bruger denne metode. Du skal ikke medtage nøgleordet “in” i for-løkken., Hvis du forlader søgeordet” in ” uden nogen værdier, vil det ikke bruge positionsparameteren som vist nedenfor. Det går ikke ind i løkken. dvs. For loop vil aldrig blive henrettet som vist i eksemplet nedenfor.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Bemærk: Se vores tidligere artikel for at forstå mere om bash positionsparametre.
Uni.-kommandoudgang som listeværdier efter “in” – nøgleord
Du kan bruge output fra enhver UNI. / Linu. – kommando som liste over værdier til for-løkken ved at omslutte kommandoen i back-ticks ` ` som vist nedenfor.,
Loop gennem filer og mapper, i en for-løkke
til At sløjfe gennem filer og mapper under en bestemt mappe, skal du blot cd ‘ en til denne mappe, og give * i for-løkken, som vist nedenfor.
følgende eksempel vil gennemløbe alle filer og mapper under din hjemmemappe.
brug af * i bash for loop ligner filen globbing, som vi bruger i Linu. – kommandolinjen, når vi bruger ls-kommando (og andre kommandoer).
for eksempel viser følgende alle filer og mapper under din hjemmemappe., Dette er det koncept, der bruges i ovenstående for5.sh eksempel.
cd ~ls *
Følgende viser alle *.conf fil, der begynder med enten A, B, eller, c eller D under /etc mappe.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
det samme argument, der bruges i kommandoen ls ovenfor, kan bruges i en bash for loop, som vist i eksemplet nedenfor.
Break out of the For loop
Du kan bryde ud af en for loop ved hjælp af ‘break’ kommando som vist nedenfor.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
Fortsat fra toppen af for-løkken
Under visse betingelser, kan du ignorere resten af kommandoerne i den for-løkke, og fortsætter løkken fra toppen igen (for den næste værdi i listen), ved hjælp af den fortsat kommando som vist nedenfor.
følgende eksempel tilføjer “(WEEKENDEEKEND)” til lør og sol, og “(ugedag)” til resten af dagene.
Bash for loop ved hjælp af C-programsynta.
dette eksempel bruger den 2. metode til bash for loop, som ligner C For loop-syntaks., Følgende eksempel genererer 5 tilfældige tal ved hjælp af bash C-style for loop.
9. Uendelig Bash for loop
Når du ikke angiver start, tilstand og stigning i bash C-stil for loop, bliver det uendelig loop. Du skal trykke på Ctrl-C for at stoppe sløjfen.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
som vi sagde ovenfor, skal du trykke på Ctrl-C for at bryde ud af denne bash uendelig for loop eksempel.,
$ ./for9.shNumber: 1Number: 2Number: 3
brug af komma i bash C-style for loop
i bash c-style loop, bortset fra stigning den værdi, der bruges i tilstanden, kan du også forøge en anden værdi som vist nedenfor.
i Initialiser sektionen og tilvækstsektionen i bash C-style For loop kan du have flere værdier ved at adskille med komma som vist nedenfor.
følgende for loop udføres i alt 5 gange ved hjælp af variablen i. men variablen j starter med 5 og får stigning med 5 hver gang sløjfen udføres.,
antal tal efter “in” nøgleord
Du kan gennemløbe ved hjælp af række tal i for-Løkken “in” ved hjælp af brace-udvidelse.
følgende eksempel løber gennem 10 gange ved hjælp af værdierne 1 til 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
række tal med trin Efter “in” nøgleord
følgende eksempel løber gennem 5 gange ved hjælp af værdierne 1 til 10, med et trin på 2. dvs. det starter med 1, og fortsætter med at øges med 2, indtil det når 10.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: glem ikke at bogmærke denne artikel til din fremtidige reference.
Hvis du har nydt denne artikel, kan du også lide..
|
|