Geek Diary
det finns många gånger i ett skalskript när du upprepade gånger vill utföra ett uttalande eller en grupp uttalanden tills något specificerat tillstånd inträffar. Dessutom kanske du vill utföra en grupp uttalanden för varje element i en viss lista. Skalet ger tre looping konstruktioner för dessa situationer: den för, Medan, och tills konstruktioner.
med för-slingan kan du ange en lista med värden. En grupp uttalanden utförs för varje värde i listan.
för loop syntax
för loop i skalet tar en lista med ord (strängar) som ett argument. Antalet ord i listan bestämmer antalet gånger uttalandena i för-slingan exekveras. Syntaxen för for-slingan är:
for variable in element1 element2 element3 do commands done
var:
- variabel: Det är ett variabelnamn.
- elements (argument_list): det kan vara vilken lista som helst med ord, strängar eller siffror, och det kan vara bokstavligt eller genererat med hjälp av ett skalkommando eller skalkommando-metakaraktär.
- kommandon: Kommandona kan vara alla operativsystemkommandon, ett användarprogram, ett skalskript eller ett skaluttalande som returnerar (producerar) en lista.
värdet på variabeln var är satt till det första ordet i listan första gången genom slingan. Andra gången genom slingan är dess värde inställt på det andra ordet i listan och så vidare. Slingan avslutas när var har tagit på var och en av värdena från argumentlistan, i sin tur, och det finns inga återstående argument.
argumentlistan för Loop
argumentlistan i en för loop kan vara en lista med ord, strängar eller siffror. Generera argumentlistan med någon av följande metoder (eller en kombination av metoder):
- använd en explicit lista
- använd innehållet i en variabel
- använd kommandoradsargument
- använd kommandosubstitution
- använd filnamn i kommandosubstitution
exempel 1 : för loop med en Explicit lista för att ange argument
När argument listas för en For loop kallas de en explicit lista. En explicit lista är den enklaste formen av en argumentlista. Slingan körs en gång för varje listelement. Följande exempel är en för loop med en explicit lista över element:
#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done
utgången för detta för loop är:
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
exempel 2 : för loop med variabelt innehåll för att ange argument
När argumenten är i en variabel och uttalandet exekveras, variabelinnehållet ersätts. I följande exempel blir texten som anges vid prompten värdet för variabelinmatningen. Denna variabel representerar argumentlistan för for-konstruktionen. Därför är texten i inmatning uppdelad i ord eller tokens baserat på vitt utrymme.
$ 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.
exempel 3 : för loop med kommandoradsargument för att ange argument
i följande exempel blir texten som anges på kommandoraden argumentlistan för for-konstruktionen. Därför är kommandoradstexten uppdelad i ord eller tokens baserat på vitt utrymme.
$ 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.
exempel 4 : För loop med Kommandosubstitution för att ange argument
syntaxen för kommandosubstitution i ett Bash-skal är:
for var in `cmd_sub`
i följande exempel används utmatningen från kommandot cat som argumentlista.
$ 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
om filen som innehåller listan var i följande format, Vad är resultatet av for-slingan.
$ 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 exemplet ovan ändras inte resultaten. IFS-variabeln är vilket vitt utrymme som helst, så både en vagnretur och mellanslag eller flik separerar varje fält i filen.
exempel 5: för loop med filnamn i Kommandosubstitution för att ange argument
vissa kommandon ger filnamn och katalognamn som deras utgång. I följande exempel ersätter skalet utmatningen av kommandot, ls / etc / p*(/etc/passwd/etc / profileoch så vidare), som argumentlistan för for-slingan.
$ 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