The Geek Diary
der er mange gange i et shell-script, når du gentagne gange vil udføre en erklæring eller gruppe af udsagn, indtil en bestemt tilstand opstår. Derudover vil du muligvis udføre en gruppe udsagn for hvert element på en bestemt liste. Skallen giver tre looping konstruktioner til disse situationer: for, mens, og indtil konstruktioner.
for-sløjfen giver dig mulighed for at angive en liste over værdier. En gruppe udsagn udføres for hver værdi på listen.
for loop syntaks
for loop i skallen tager en liste over ord (strenge) som et argument. Antallet af ord på listen bestemmer antallet af gange udsagnene i for-sløjfen udføres. Syntaksen for for-sløjfen er:
for variable in element1 element2 element3 do commands done
hvor:
- variabel: det er ethvert variabelnavn.
- elementer (argument_list): det kan være en hvilken som helst liste over ord, strenge eller tal, og det kan være bogstaveligt eller genereret ved hjælp af en shell-kommando eller shell-kommandolinjemetakarakter.
- kommandoer: Kommandoerne kan være alle operativsystemkommandoer, et brugerprogram, et shell-script eller en shell-erklæring, der returnerer (producerer) en liste.
værdien af variablen var er indstillet til det første ord på listen første gang gennem sløjfen. Anden gang gennem løkken er dens værdi indstillet til det andet ord på listen osv. Sløjfen slutter, når var har taget på hver af værdierne fra argumentlisten, igen, og der er ingen resterende argumenter.
argumentlisten For Loop
argumentlisten i A For loop kan være en hvilken som helst liste med ord, strenge eller tal. Generer argumentlisten ved hjælp af en af følgende metoder (eller kombination af metoder):
- brug en eksplicit liste
- brug indholdet af en variabel
- brug kommandolinjeargumenter
- brug kommandosubstitution
- brug filnavne i kommandosubstitution
eksempel 1 : For loop brug af en eksplicit liste til at specificere argumenter
når argumenter er angivet for en for loop, kaldes de en eksplicit liste. En eksplicit liste er den enkleste form for en argumentliste. Sløjfen udføres en gang for hvert listeelement. Følgende eksempel er en for loop ved hjælp af en eksplicit liste over elementer:
#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done
udgangen af 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 ved hjælp af variabelt indhold til at specificere argumenter
når argumenterne er i en variabel og sætningen udføres, variabelindholdet erstattes. I det følgende eksempel bliver teksten, der indtastes ved prompten, værdien af variabelindgangen. Denne variabel repræsenterer argumentlisten for konstruktionen. Derfor er teksten i INPUT opdelt i ord eller tokens baseret på hvidt rum.
$ 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 loop ved hjælp af kommandolinjeargumenter til at specificere argumenter
i det følgende eksempel bliver teksten, der er indtastet på kommandolinjen, argumentlisten for for-konstruktionen. Derfor er kommandolinjeteksten opdelt i ord eller tokens baseret på hvidt mellemrum.
$ 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 loop ved hjælp af Kommandosubstitution til at specificere argumenter
syntaksen for kommandosubstitution i en Bash-skal er:
for var in `cmd_sub`
følgende eksempel bruger output 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, der indeholder listen, var i følgende format, hvad er resultatet af for-sløjfen.
$ 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 ovenstående eksempel ændres resultaterne ikke. IFS-variablen er ethvert hvidt mellemrum, så både en vognretur og mellemrum eller fane adskiller hvert felt i filen.
eksempel 5 : For loop ved hjælp af filnavne i Kommandosubstitution til at angive argumenter
nogle kommandoer angiver filnavne og katalognavne som deres output. I det følgende eksempel erstatter skallen output fra kommandoen, ls / etc/p*(/etc/pass/etc / profilog så videre), som argumentlisten for for-sløjfen.
$ 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....
Leave a Reply