Articles

Geek Diary

Det er mange ganger i et skallskript når du vil gjentatte ganger utføre en setning eller gruppe setninger til en bestemt tilstand oppstår. I tillegg vil du kanskje utføre en gruppe setninger for hvert element i en bestemt liste. Skallet gir tre looping konstruksjoner for disse situasjonene: for, mens, og til konstruksjoner.

for-sløyfen lar deg angi en liste over verdier. En gruppe setninger utføres for hver verdi i listen.

for loop syntaks

for loop i skallet tar en liste over ord (strenger) som et argument. Antall ord i listen bestemmer antall ganger uttalelsene i for-løkken utføres. Syntaksen for for-sløyfen er:

for variable in element1 element2 element3 do commands done

hvor:

  • variabel: det er et variabelnavn.
  • elementer (argument_list): det kan være en liste over ord, strenger eller tall, og det kan være bokstavelig eller generert ved hjelp av en shell-kommando eller shell-kommandolinje metakarakter.
  • kommandoer: Kommandoene kan være alle operativsystemkommandoer, et brukerprogram, et shell-skript eller en shell-setning som returnerer (produserer) en liste.

verdien av variabelen var er satt til det første ordet i listen første gang gjennom løkken. Den andre gangen gjennom løkken, er verdien satt til det andre ordet i listen, og så videre. Sløyfen avsluttes når var har tatt på hver av verdiene fra argumentlisten, i sin tur, og det er ingen gjenværende argumenter.

Argumentlisten for Løkke

argumentlisten i en løkke kan være en liste med ord, strenger eller tall. Generer argumentlisten ved hjelp av en av følgende metoder (eller en kombinasjon av metoder):

  • Bruk en eksplisitt liste
  • Bruk innholdet i en variabel
  • Bruk kommandolinjeargumenter
  • Bruk kommandosubstitusjon
  • Bruk filnavn i kommandosubstitusjon

Eksempel 1 : for løkke bruker Du En Eksplisitt Liste Til Å Angi Argumenter

når argumenter er oppført for en for løkke, kalles de en eksplisitt liste. En eksplisitt liste er den enkleste formen for en argumentliste. Sløyfen utføres en gang for hvert listeelement. Følgende eksempel er en for loop ved hjelp av en eksplisitt liste over elementer:

#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done

utgangen av dette for loop er:

Value of fruit is: apple Value of fruit is: orange Value of fruit is: banana Value of fruit is: peach Value of fruit is: kiwi

Eksempel 2 : for loop bruker Variabelt Innhold For Å Angi Argumenter

når argumentene er i en variabel og setningen utføres, variabelinnholdet er erstattet. I følgende eksempel blir teksten som skrives inn ved spørringen, verdien av variabelinngangen. Denne variabelen representerer argumentlisten for for-konstruksjonen. Derfor er teksten i INNDATA delt inn i ord eller symboler basert på mellomrom.

$ cat ex1.sh #!/bin/bash# Script name: ex1.shecho "Enter some text: \c" read INPUTfor var in $INPUT do echo "var contains: $var"done

$ ./ex1.shEnter some text: I like the Bash shell. var contains: Ivar contains: likevar contains: thevar contains: Kornvar contains: shell.

Eksempel 3 : for løkke som bruker Kommandolinjeargumenter Til Å Angi Argumenter

i følgende eksempel blir teksten som skrives inn på kommandolinjen, argumentlisten for for-konstruksjonen. Derfor er kommandolinjeteksten delt inn i ord eller tokens basert på mellomrom.

$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done

$ ./ex2.sh I am The Geek.command line contains: Icommand line contains: amcommand line contains: Thecommand line contains: Geek.

Eksempel 4 : For løkke Som Bruker Kommandosubstitusjon For Å Angi Argumenter

syntaksen for kommandosubstitusjon i Et Bash-skall er:

for var in `cmd_sub`

følgende eksempel bruker utdataene fra cat-kommandoen som argumentliste.

$ cat fruit1 apple orange banana peachkiwi

$ cat ex4.sh #!/bin/bash# Script name: ex4.shfor var in `cat fruit2` do echo "var contains: $var"done
$ ./ex4.shvar contains: Apple var contains: Orange var contains: Banana var contains: Peach var contains: Kiwi

hvis filen som inneholder listen var i følgende format, hva er resultatet av for-sløyfen.

$ cat fruit3Apple Orange Banana Peach Kiwi

$ cat ex5.sh #!/bin/bash# Script name: ex5.shfor var in `cat fruit3` do echo "$var"done
$ ./ex5.shApple Orange Banana Peach Kiwi

i eksemplet ovenfor endres ikke resultatene. Ifs-variabelen er et hvilket som helst mellomrom, så både et linjeskift og et mellomrom eller en fane skiller hvert felt i filen.

Eksempel 5: for løkke som bruker Filnavn i Kommandosubstitusjon For Å Angi Argumenter

noen kommandoer gir filnavn og katalognavn som utdata. I følgende eksempel erstatter skallet utgangen av kommandoen, ls / etc / p*(/etc / passwd / etc / profileand så videre), som argumentlisten for for loop.

$ cat ex7.sh #!/bin/bash# Script name: ex7.shfor var in `ls /etc/p*`do print "var contains: $var"done

# ./x.sh var contains: /etc/passwdvar contains: /etc/passwd-var contains: /etc/printcapvar contains: /etc/profile....