The Geek Diary
komentotulkkikirjoituksessa on monta kertaa, kun haluat toistuvasti suorittaa lausuman tai lauseryhmän, kunnes jokin tietty ehto ilmenee. Lisäksi, saatat haluta suorittaa ryhmä lausuntoja kunkin elementin tietyn luettelon. Kuori tarjoaa kolme silmukkarakennetta näihin tilanteisiin: for, while, and until constructs.
for-silmukan avulla voit määrittää arvoluettelon. Jokaiselle luettelon arvolle suoritetaan joukko lausumia.
silmukan syntaksille
komentotulkin for-silmukka ottaa argumentiksi Sanaluettelon (merkkijonot). Luettelon sanojen määrä määrää, kuinka monta kertaa for-silmukan lauseet suoritetaan. For-silmukan syntaksi on:
for variable in element1 element2 element3 do commands done
missä:
- muuttuja: se on mikä tahansa muuttujan nimi.
- elementit (argument_list): se voi olla mikä tahansa luettelo sanoista, merkkijonoista tai numeroista, ja se voi olla kirjaimellinen tai luotu komentotulkkikomennolla tai komentorivin metakarakterilla.
- komennot: Komennot voivat olla mitä tahansa käyttöjärjestelmän komentoja, käyttäjäohjelmaa, komentotulkin komentosarjaa tai komentotulkin lausetta, joka palauttaa (tuottaa) luettelon.
muuttujan var arvo asetetaan listan ensimmäiselle sanalle ensimmäistä kertaa silmukan läpi. Toisen kerran silmukan läpi, sen arvo asetetaan listan toiseen sanaan ja niin edelleen. Silmukka päättyy, kun Var on ottanut kukin argumenttiluettelon arvoista vuorollaan, eikä jäljellä ole enää argumentteja.
for Loopin Argumenttiluettelo
for Loopin argumenttiluettelo voi olla mikä tahansa luettelo sanoista, merkkijonoista tai numeroista. Luo parametrilista käyttäen jotakin seuraavista menetelmistä (tai menetelmien yhdistelmää):
- käytä eksplisiittistä luetteloa
- käytä muuttujan sisältöä
- käytä komentoriviargumentteja
- käytä komentoriviargumentteja
- käytä tiedostonimiä komennon substituutiossa
Esimerkki 1 : jos silmukka käyttää eksplisiittistä luetteloa argumenttien määrittelemiseksi
kun argumentit on lueteltu for loopille, niitä kutsutaan eksplisiittiseksi luetteloksi. Eksplisiittinen luettelo on argumenttiluettelon yksinkertaisin muoto. Silmukka suoritetaan kerran kutakin luetteloelementtiä kohti. Seuraava esimerkki on for silmukka käyttäen eksplisiittistä elementtiluetteloa:
#!/bin/bashfor fruit in apple orange banana peach kiwi do echo "Value of fruit is: $fruit"done
tämän tuotos silmukalle on:
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
Esimerkki 2 : silmukalle käyttäen muuttuvaa sisältöä argumenttien määrittelemiseksi
kun argumentit ovat muuttuja ja lauseke suoritetaan, muuttujan sisältö korvataan. Seuraavassa esimerkissä kehotteeseen syötetty teksti muuttuu muuttujan syötön arvoksi. Tämä muuttuja edustaa for Constructin argumenttiluetteloa. Siksi SYÖTETEKSTISSÄ oleva teksti on pilkottu sanoiksi tai tokeneiksi valkoisen avaruuden perusteella.
$ 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.
esimerkki 3 : komentoriville syötetystä tekstistä tulee Constructin parametrilista. Siksi komentorivin teksti on jaettu sanoihin tai tokeneihin valkoisen avaruuden perusteella.
$ 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.
esimerkki 4 : Silmukassa, jossa käytetään komentojen korvaamista argumenttien
$ cat ex2.sh#!/bin/bash# Script name: ex2.shfor var in $* do echo "command line contains: $var"done
määrittelemiseksi, komentojen korvaamisen syntaksi bash-komentotulkissa on:
for var in `cmd_sub`
seuraavassa esimerkissä käytetään Cat-komennon ulostuloa parametrilistana.
$ 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
Jos listan sisältävä tiedosto oli seuraavassa muodossa, mikä on for Loopin tulos.
$ 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
yllä olevassa esimerkissä tulokset eivät muutu. IFS-muuttuja on mikä tahansa valkoinen avaruus,joten sekä carriage return että space tai tab erottavat tiedoston jokaisen kentän.
esimerkki 5 : kun loop käyttää tiedostonimiä komentojen korvaamisessa argumenttien
määrittelemiseksi, jotkin komennot antavat tulosteeksi tiedostojen nimet ja hakemistojen nimet. Seuraavassa esimerkissä komentotulkki korvaa komennon, ls /etc/p*(/etc/passwd/etc/profile ja niin edelleen), for-silmukan parametrilistana.
$ 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