Linuxi shelliskripti näited BASH 'for' tsüklist

Mida teada

  • Bashis jaoks tsükkel, kõik laused vahel teha ja tehtud tehakse üks kord iga loendi või numbrivahemiku üksuse kohta.
  • Suure nimekirjaga kasutage sisse {list}, et liikuda algus- ja lõpp-punkti vahel. Kasutage ellipsit täisarvuvahemiku itereerimiseks, nt numbri jaoks {1..10}.
  • Teatud numbrite vahelejätmiseks lisage vahemikku kolmas number. Näiteks kasutada {0..100..10} loetleda ainult iga 10. number.

Programmeerimis- või skriptikeeles pakub Bash mitmeid viise koodi kordamiseks – protsessi, mida nimetatakse silmuseks –, kus a jaoks silmus kordab teatud osa koodist. See võimaldab käivitada rida käske, kuni konkreetne tingimus on täidetud. Selles juhendis näitame teile, kuidas Bashi kirjutada jaoks Loop.

Kuidas loendit läbida

Skriptimiskeeled, nagu Bash, sisaldavad sarnaseid programmeerimiskonstruktsioone nagu teised keeled. Näiteks parameetrite importimine saada sisend klaviatuurilt ja salvestada need sisendid muutujatena, mis siis sooritama teatud toimingu sisendparameetrite väärtuse põhjal.

Mõelge lihtsale näidisskriptile pealkirjaga loop.sh:

#!/bin/bash
numbri jaoks 1 2 3 4 5
teha
kaja $number
tehtud
väljumine 0

Bashi kasutusviis jaoks tsüklid on mõnevõrra erinev sellest, kuidas teised programmeerimis- ja skriptikeeled käitavad jaoks silmuseid. Purustame skripti.

BASH-is jaoks silmus, kõik laused nende vahel teha ja tehtud tehakse üks kord iga loendi üksuse kohta. Selles näites sisaldab loend kõike, mis tuleb pärast sõna sisse-numbrid 1 2 3 4 5.

Iga kord, kui tsükkel kordub, lisatakse loendi järgmine väärtus sõna järel määratud muutujasse jaoks. Ülaltoodud tsüklis nimetatakse muutujat number.

The kaja avaldus kuvab teabe ekraanile. Seetõttu võtab see näide numbrid 1 kuni 5 ja väljastab iga numbri ükshaaval ekraanile:

tsükli näide bash-skriptis

Kuidas teha silmust algus- ja lõpp-punkti vahel

Selle loop.sh skripti probleem seisneb selles, et kui soovite töödelda suuremat loendit (näiteks 1 kuni 500), kulub kõigi numbrite sisestamiseks palju aega. Selle asemel määrake algus- ja lõpp-punkt:

#!/bin/bash
numbri jaoks {1..10}
teha
kaja "$number"
tehtud
väljumine 0

Reeglid on samad. Väärtused sõna järel sisse koostage loend, mille kaudu itereerida, ja iga loendi väärtus asetatakse muutujasse (st numbrisse) ja iga kord, kui tsükkel itereerub, jäävad laused teha ja tehtud sooritatakse.

Peamine erinevus on loendi koostamise viis. Lokkis sulud tähistavad vahemikku ja antud juhul on vahemik 1 kuni 10 (kaks punkti eraldavad vahemiku algust ja lõppu).

Seetõttu jookseb see näide läbi iga numbri vahemikus 1 kuni 10 ja väljastab numbri ekraanile.

Sama tsükli oleks võinud kirjutada nii, koos süntaks identne esimese näitega:

numbri jaoks 1 2 3 4 5 6 7 8 9 10

Kuidas vahemikus numbreid vahele jätta

Eelmine näide näitas, kuidas teha silmust algus- ja lõpp-punkti vahel. Siin on, kuidas vahemikus numbreid vahele jätta.

Näiteks tsükli 0 ja 100 vahel, kuid ainult iga kümnenda numbri kuvamiseks, kasutage selle väljundi saamiseks järgmist skripti:

#!/bin/bash
numbri jaoks 0..100..10}
teha
kaja "$number"
tehtud
väljumine 0

Reeglid on samad. Seal on loend, muutuja ja lausete komplekt, mille vahel tuleb täita teha ja tehtud. Seekordne nimekiri näeb välja selline: {0..100..10}.

Esimene number on 0 ja lõppnumber on 100. Kolmas number (10) on loendis olevate üksuste arv, mille see vahele jätab.

Seetõttu kuvab ülaltoodud näide järgmise väljundi:

alternatiivne bash loopi väljund

Praktiline näide

Silmuste jaoks teeb enamat kui numbriloendite kordamine. Näiteks kasutage loendina teiste käskude väljundit.

Järgmine näide näitab, kuidas helifaile teisendada MP3 juurde WAV:

#!/bin/bash
./*.mp3 faili jaoks
teha
mpg -w ./wavs/"${fail}".wav "$fail"
tehtud

Selle näite loendis on kõik praeguses kaustas olevad failid laiendiga MP3 ja muutuja on fail.

Käsk mpg teisendab MP3-faili WAV-iks. Tõenäoliselt peate selle tööriista siiski esmalt installima paketihalduri abil.