Hogyan írjunk Bash WHILE-hurkot?

Parancsok, szintaxisok és példák

Parancsok sorozatát végrehajthatja szkriptfájlba írásával, majd futtatásával.

A szkriptfájl egyszerűen egy szövegfájl, általában a .SH fájlkiterjesztéssel, amely utasításokat tartalmaz, amelyek végrehajthatók a parancssorból ( shell ) is.

Míg a Loop példák

Az alábbiakban példaként említhetjük az idő hurokját. Futtatáskor a szkriptfájl a képernyőn az 1-9. Számokat nyomtatja ki. A time-statement nagyobb rugalmasságot biztosít a lezárási feltétel megadásához, mint a for-loop .

#! / bin / bash count = 1, miközben [$ count -le 9] echo "$ count" alvás 1 ((count ++)) kész

Például, az előző szkriptet végtelen hurokvá teheti, ha elhagyja a növekményes állítást "((count ++))":

#! / bin / bash count = 1, miközben a [$ count -le 9] echo "$ count" alvás 1 kész

Az "alvás 1" utasítás minden egyes iteráció után 1 másodpercig szünetelteti a végrehajtást. Használja a Ctrl + C billentyűkombinációt a folyamat befejezéséhez.

Végtelen hurokot is létrehozhat úgy, hogy kettőspontot állít be:

#! / bin / bash count = 1 miközben: echo "$ count" alvás 1 ((count ++)) kész

Annak érdekében, hogy többszörös feltételeket használhasson a hurokhurokban, használd a kettős szögletes zárójelet:

count = 1 kész = 0, míg [[$ count -le 9] && [$ done == 0]] echo "$ count" alvás 1 ((count ++)), ha [$ count == 5]; akkor $ done = 1 fi kész

Ebben a szkriptben a "kész" változó 0-ra van inicializálva, majd 1-re állítva, ha a számlálás eléri az 5-öt. A hurok feltétel azt állítja, hogy a hurok addig folytatódik, amíg a "számlálás" kilencnél kevesebb és a "kész" egyenlő nullára. Ezért a hurok kilép, ha a számláló egyenlő az 5-ös értékkel.

A "&&" jelentése logikai "és" és "||" logikus "vagy".

A "és" és "vagy" feltételek között egy alternatív jelölés "-a" és "-o" egyszögletes zárójelekkel. A fenti feltétel:

[[$ count -le 9] && [$ done == 0]]

... újraírható, mint:

[$ count -le 9] -a [$ done == 0]

A szövegfájl olvasása általában egy idő hurokkal történik. A következő példában a bash parancsfájl az "inventory.txt:" nevű fájl sorában olvasható a tartalom sorában.

FILE = inventory.txt exec 6

Az első sor hozzárendeli a bemeneti fájl nevét a "FILE" változóhoz. A második sor elmenti a "standard bemenetet" a "6" fájlleíróban (ez bármilyen érték lehet 3 és 9 között). Ez úgy történik, hogy a "standard bemenet" visszaállítható a parancsfájl végén a "0" fájlleíróhoz (lásd az "exec 0 utasítás" parancsot. A 3. sorban a bemeneti fájl hozzárendelve a "0" fájlleíróhoz a szabványos bemenethez.A "read" utasítás aztán minden egyes iterációban leolvassa a fájl sorát, és a "line1" változóhoz rendel.

Annak érdekében, hogy az időhurok idő előtt elhagyhasson, használhatja a következő szüneteltetést:

count = 1 kész = 0, miközben [$ count -le 9] echo "$ count" alvás 1 ((count ++)) ha [$ count == 5]

A szüneteltetési utasítás a program végrehajtását a végére hágja, és végrehajtja az azt követő állításokat. Ebben az esetben a "visszhang kész" kifejezés.

A folytonos megfogalmazás azonban csak az aktuális iteráció miközben hurok utasításának hátralévő részét átugorja, és közvetlenül a következő iterációra ugrik:

count = 1 kész = 0, miközben [$ count -le 9] aludni 1 ((count ++)) ha [$ count == 5] majd folytassa fi echo "$ count" kész echo kész

Ebben az esetben a "folytatás" utasítás végrehajtódik, ha a "count" változó eléri a 5 értéket. Ez azt jelenti, hogy a következő utasítás (echo "$ count") nem fut le ezen az iteráción (amikor a "count" értéke 5).