kétféle bash for loops elérhető. Az egyik az” in ” kulcsszót használja az értékek listájával, a másik a C programozást, például a szintaxist használja.
Ez a cikk a folyamatos Bash bemutató sorozatunk része.
Ez megmagyarázza mind a bash for loop methods, valamint 12 különböző példát, hogyan kell használni a bash for loop a shell script.
könyvjelző ezt a cikket a jövőben is, mivel ez az egyetlen cikk, amit valaha is kell hivatkozni, hogyan kell használni Bash hurkok példákkal.,
1. módszer: Bash For Loop using “in”and list of values
szintaxis:
for varname in listdo command1 command2 ..done
a fenti szintaxis:
- mert, in, do and done are keywords
- ” list ” contains list of values. A lista lehet olyan változó, amely több szóközökkel elválasztott szót tartalmaz. Ha a lista hiányzik a for utasításból, akkor a pozíciós paramétert veszi át a héjba.
- varname bármely Bash változó neve.
ebben a formában a for utasítás végrehajtja a testbe zárt parancsokat, egyszer a lista minden elemére., Például, ha az értékek listája 5 elemet tartalmaz, akkor a for hurok összesen 5 alkalommal kerül végrehajtásra, egyszer a lista minden elemére. A lista aktuális elemét a “varname” változóban tárolja minden alkalommal a hurokon keresztül. Ez a “varname” feldolgozható a for hurok testében.
2. módszer: Bash For Loop using C like syntax
a for loop második formája hasonló a “C” programozási nyelv for loop-jához, amelynek három kifejezése van (inicializálás, állapot és frissítés).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
a fenti bash parancsszintax esetén
- az első iteráció előtt, az expr1 kiértékelésre kerül. Ezt általában a hurok változóinak inicializálására használják.
- A do és done közötti összes kijelentés többször végrehajtásra kerül, amíg az expr2 értéke nem igaz.
- a hurok minden iterációja után az expr3 kiértékelésre kerül. Ezt általában egy hurok számláló növelésére használják.
a következő 12 példa azt mutatja, hogyan kell a hurkokat különböző módon bashelni.,
statikus értékek a lista után ” in ” kulcsszó
a következő példában, az értékek listája (Mon, K, sze, cs és P) közvetlenül után a kulcsszó “in” a Bash hurok.
vigyázat: az értékek listáját nem szabad vesszővel elválasztani (Mon, K, sze, Cs, P). A vesszőt az érték részeként kell kezelni. vagyis a “Mon” helyett a “Mon” értéket használja az alábbi példában látható értékként.
vigyázat: az értékek listáját nem szabad kettős idézetben mellékelni. (“H K Sze Cs P”)., Ha csatolja a kettős idézet, akkor kell kezelni, mint egy érték (ahelyett, hogy 5 különböző értékek), amint az az alábbi példában.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
változó a lista után” in “kulcsszó
ahelyett, hogy az értékeket közvetlenül a for hurok, akkor tárolja az értékeket egy változó, és használja a változó a For hurok után a” in ” kulcsszó, amint az a következő példában.
Vigyázat: legjobb gyakorlatként mindig idéznie kell a bash változókat, amikor azt utalja. Kevés kivétel van e bevált gyakorlati szabály alól. Ez az egyik., Ha dupla idézet a változó ebben a hurok, az értékek listáját kell kezelni, mint egy érték. Sokan esnek ebbe a csapdába. Legyen óvatos, és ne duplázza meg a változót a for hurokban.
nem adja meg a lista; a pozicionális paraméterek
Ha nem adja meg a kulcsszót – “a” követi, hogy bármelyik fenti értékeket a bash for ciklus, akkor használd a pozicionális paraméterek (én.e az érvek, amelyeket át a shell script).
Vigyázat: kérjük, legyen óvatos, ha ezt a módszert használja. Nem szabad a “in” kulcsszót beilleszteni a for hurokba., Ha az “in” kulcsszót értékek nélkül hagyja, akkor nem fogja használni a pozicionális paramétert az alábbiak szerint. Nem fog menni a hurokba. azaz a hurok soha nem lesz végrehajtva, amint az az alábbi példában látható.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Megjegyzés: olvassa el korábbi cikkünket, hogy többet tudjon meg a Bash pozicionális paraméterekről.
Unix parancs kimenet listaértékként a ” in “kulcsszó után
bármely UNIX / Linux parancs kimenetét használhatja a for hurok értékeinek listájaként, ha a parancsot a Back-ticks “‘ – be helyezi az alábbiak szerint.,
hurok fájlok és könyvtárak a For loop
hurok át fájlokat és könyvtárakat egy adott könyvtár, csak cd, hogy a könyvtár, és így * a For hurok az alábbiak szerint.
a következő példa végigjárja az összes fájlt és könyvtárat a saját könyvtárában.
használata * a bash for loop hasonló a fájl globbing, hogy használjuk a linux parancssorban, amikor használjuk ls parancs (és más parancsok).
például a következőkben megjelenik az összes fájl és könyvtár a saját könyvtárában., Ez a koncepció, amelyet a fentiek használnak for5.sh példa.
cd ~ls *
a következő megjeleníti az összes*.conf fájl, amely vagy a, b, vagy, c vagy d az /etc könyvtár alatt kezdődik.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
ugyanaz az argumentum, amelyet a fenti ls parancsban használnak, egy bash for loop-ban használható, az alábbi példában látható módon.
kitörni a for hurok
akkor kitörni a For hurok segítségével “break” parancs az alábbiak szerint.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
folytatás a for loop tetejéről
bizonyos feltételek mellett figyelmen kívül hagyhatja a for loop többi parancsát, majd folytassa a hurkot a felső részből (a lista következő értékéhez), a continue paranccsal az alábbiak szerint.
a következő példa a “(WEEKEND)” – et a Sat and Sun-hoz, a “(weekday)” pedig a többi naphoz adja hozzá.
bash for loop using C program syntax
Ez a példa a bash for loop 2. módszerét használja, amely hasonló a C For loop szintaxishoz., A következő példa generál 5 véletlen számot a Bash C-stílus hurok.
9. Végtelen Bash a hurok
Ha nem adja meg a start, feltétel, és növekmény a bash C-stílus hurok, akkor lesz végtelen hurok. A hurok leállításához nyomja meg a Ctrl-C billentyűt.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
mint már említettük, nyomja meg a Ctrl-C kitörni ebből bash végtelen hurok például.,
$ ./for9.shNumber: 1Number: 2Number: 3
vessző használata a Bash C-stílusban a
hurokhoz a bash C-stílusú hurokban, az állapotban használt érték növelésén kívül más értéket is növelhet az alábbiak szerint.
az inicializálás szakaszban, valamint a hurok Bash C-stílusának növekményrészében több érték is lehet, ha vesszővel elválasztjuk az alább látható módon.
a következő hurok végrehajtása összesen 5 alkalommal, a változó i. azonban a változó J kezdeni 5, és egyre növekmény 5 minden alkalommal, amikor a hurok lesz végrehajtva.,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
számtartomány után” a “kulcsszó
akkor hurok segítségével számtartományt a For hurok” a ” segítségével zárójel bővítése.
a következő példa 10-szer hurkol át az 1-től 10-ig terjedő értékek használatával.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
körű számok közötti után “a” kulcsszó
A következő példa keresztül hurkok 5 alkalommal használja az értékek 1-től 10-ig, egy növekedése a 2. azaz 1-gyel kezdődik, és 2-vel növekszik, amíg el nem éri a 10-et.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: ne felejtsd el megjelölni ezt a cikket a jövőbeli hivatkozáshoz.
ha tetszett ez a cikk, akkor is tetszik..
|
|