Bash „While” ciklus: oktatóanyag és példák

A „while” ciklus használata a Bash szkriptekben a parancs(ok)on keresztüli iterációhoz.

A Bash (Bourne Again Shell) egy shell parancssor és szkriptnyelv GNU/Linux operációs rendszerekben. Ez a legtöbb Linux disztribúció alapértelmezett shellje.

A legtöbb szkriptnyelvhez hasonlóan a Bash hurokszintaxist biztosít a hasonló feladat többszöri megismétléséhez. Ebben a cikkben megtudjuk, hogyan kell használni a míg hurok Bashban.

Bevezetés

A míg A Bash-beli ciklus a parancs(ok) (végrehajtott parancsok) többszöri végrehajtására szolgál egy másik parancs(ok) kimenete alapján (feltétel parancsok). A végrehajtott parancsok mindaddig futnak, amíg a feltétel parancs sikeresen le nem fut (azaz 0 állapotot ad vissza. Linuxban minden parancs 0-t ad vissza, ha sikertelen, és nem nulla egész számot ad vissza sikertelenség esetén).

Ha több feltételparancs is van, az utasítás csak a lista utolsó parancsának állapotát veszi figyelembe, azaz a ciklus addig fut, amíg a lista utolsó parancsa sikeresen le nem fut.

Általános szintaxis

Az általános szintaxis a míg A ciklus a Bashban:

miközben kész

A végrehajtási parancslista addig fut, amíg a feltétel parancslista utolsó parancsa sikeresen le nem fut, és 0 állapottal ki nem lép. Az iteráció során, amikor az utolsó feltétel parancs meghiúsul, a ciklus kilép.

A felhasználó bármely futtatható fájlt megadhat a parancslistákban. Lehetnek szabványos Linux programok vagy egyéni felhasználói programok vagy szkriptek. Minden parancsnak vagy egy új sorban kell lennie, vagy pontosvesszővel kell elválasztani ugyanabban a sorban.

Lássunk néhány példát.

Hurkolás addig, amíg egy változónak meghatározott értéke van: A következő ciklus a változó értékéig fut x nem egyenlő 10-el.

x=0 miközben [[ $x -ne 10 ]] visszhangzik $x ((x++)) kész

Minden iterációban ellenőrizzük, hogy x értéke 10-e. Az érték ellenőrzése a teszt parancs. [[ Kifejezés ]] a tesztparancs szintaxisa (lásd férfi teszt). Itt mivel használjuk a -ne operátor (amely a „nem egyenlő”-t jelenti), a tesztparancs 0-t, azaz sikert ad vissza, ha x értéke nem 10, és nem nulla értéket ad vissza, azaz sikertelenséget, ha x értéke 10.

Aztán belül a csinálni... kész blokkot, kiírjuk x értékét és növeljük. Ha x értéke 10, a tesztparancs nem nulla állapotot ad vissza, és a ciklus kilép.

Jegyzet: A while ciklusban használandó indexváltozót vagy a while ciklus előtt, vagy a feltétel parancsokban kell inicializálni, szemben a for ciklussal, amely lehetővé teszi a változó implicit inicializálását.

Több feltétel paranccsal: A következő ciklus 5 nevű könyvtárat hoz létre dir0, dir1, ... dir4.

z=0, miközben echo "Fájlok listája:" ls -l [[ $z -ne 5 ]] do echo "Dir$z létrehozása..." mkdir dir$z ((z++)) kész

Első parancsok echo "Fájlok listája:" és ls -l egyszer teljesen végrehajtódik; sikerük vagy kudarcuk semmilyen hatással nincs arra, hogy mennyi ideig fog futni a hurok.

Ezután a z változó értékének ellenőrzésére szolgáló tesztparancs végrehajtásra kerül. Amíg a z értéke nem lesz 5, a tesztparancs sikeres állapotot ad vissza, és így a ciklus tovább fut. A feltételparancsok és a végrehajtott parancsok sorrendben futnak. Itt minden iterációnál először az echo parancsot és az ls in condition parancsot futtatja, majd a 3. feltétel parancs ellenőrzi a z értékét. Ha nem 5, akkor belép a ciklusba és végrehajtja a megadott parancsokat.

Szünet és Folytatás

Megszakítási nyilatkozat feltételes kilépéshez

Használhatjuk a feltételes utasítást is ha a hurkon belül. A ha utasítás használható a szünet utasítást a ciklusból való feltételes kilépéshez.

x=0 míg a [[ $x -ne 10 ]] megteszi, ha [[ $x -eq 5 ]] break fi echo $x ((x++)) kész

A fenti while ciklus 0-tól 4-ig terjedő számokat fog kiírni. Majd ha az i értéke 5, kitör a ciklusból. Ez különösen akkor hasznos, ha egy ciklusból ki kell lépni, amikor egy parancs adott kimenetet ad.

Folytassa az utasítást az iteráció feltételes kihagyásához

Bashnak is van a folytatni utasítással, hogy kihagyja az iteráció fennmaradó részét a ciklusban, ha egy adott feltétel teljesül.

x=0 míg [[ $x -ne 10 ]] csináld, ha [[ $x -eq 5 ]] tovább fi echo $x ((x++)) kész

A fenti ciklus 0 és 10 közötti számokat nyomtat, kivéve 5-öt, mert az iteráció során x=5 van egy folytatási utasítás, amely kihagyja a kód többi részét a ciklusban az iteráció elején x=6.

Hurok használata: Scriptek és parancssor

A hurok szintaxisok a Bash shellben közvetlenül vagy egy végrehajtható shell parancsfájlból használhatók. Hasonló számára és míg hurkok, egyszer an míg A ciklus szintaxisa be van írva a parancsértelmezőn, a shell folytatja a promptot, hogy a felhasználó folytassa a hurkolandó parancsokat.

Vagy a felhasználó elmentheti ezt egy szkriptfájlba, és végrehajthatja a parancsfájlt.

A #!/bin/bash az elején megadja a fájl végrehajtásakor használandó értelmezőt. Bár manapság a Bash a leggyakrabban használt shell, néhány felhasználó előnyben részesíti az ehhez hasonló shelleket zsh, amelyet a fájl elején a bash helyett kell megadni.

Végrehajtási engedélyek megadása ehhez a fájlhoz futtassa:

chmod +x test.sh

Végül, a fájl végrehajtásához, fuss:

./test.sh

Következtetés

A míg hurok, hasonló számára és amíg A ciklusok a Bash-szkriptek fontos jellemzői. A While ciklus hasonlóképpen használható, mint az till ciklus, azzal a különbséggel, hogy alternatív parancsok/programok futtatására használják, ha egy adott program sikeres. Ez gyakran hasznos a fejlett hálózati szkriptekben, rendszerkarbantartó szkriptekben stb.