Bash 'For' Loop: oktatóanyag és példák

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ó feladatok többszöri megismétléséhez. Ebben a cikkben megtudjuk, hogyan kell használni a számára hurok Bashban.

Bevezetés

Egy tipikus Bash-szkript tartalmaz egy sor parancsot, amelyeket egymás után kell végrehajtani. A változók karakterláncok, egész indexértékek, parancsok eredményei stb. tárolására használhatók. Cikkekre van szükség, ha a felhasználó egy adott parancsot többször is végrehajt. Különösen hasznos, ha az egyik parancs kimenete lista formájában van, és a listában minden egyes eredménynél egy második parancsot kell futtatni.

Általános szintaxis

Az általános szintaxis a számára A ciklus a Bashban:

mert in do ... ... kész

Itt, a egy Bash változó, amelynek érvényes Linux shell-változónévnek kell lennie, azaz a név betűk (az, AZ), számok (0-9) és aláhúzás ( _ ) kombinációját tartalmazza, és betűvel vagy betűvel kell kezdődnie. egy aláhúzás.

A vagy egész indexek egyéni tartománya, amelyek hurkolva lesznek, vagy egész számok vagy karakterláncok egyéni listája. Tartalmazhat egy másik Linux parancsot is, azonban az ilyen parancs kimenetét szóközzel vagy újsor karakterekkel kell elválasztani, azaz a Bash által listává elemezhető (A Bash-beli lista alapvetően szóközzel vagy újsorral elválasztott értékek gyűjteménye ).

Bármelyik parancs(oka)t is végre kell hajtani, azt a fájlba kell helyezni csináld..kész Blokk.

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

Hurkolás egész értékek tartományán: A következő kód létrehozza a dir1, dir2, dir3 és könyvtár10 nevű könyvtárakat.

for i in {1..10} do mkdir dir$i done

Ismétlés a rögzített értékek listáján: A következő kód minden karakterláncot vagy egész számot nyomtat az adott rögzített listában.

nekem a Hello 1 2 3 Viszlát! do echo $i done

Hurkolás egy parancs kimenetén: A következő kód hurkok a kimeneten ls és kiírja az egyes fájlok nevét a megadott formátumban.

for i in `ls` do echo "A fájlnév $i" kész

Kifejezés alapú szintaxis

A C programozási nyelvhez hasonló kifejezés-alapú szintaxis is lehetséges a Bashban:

for ((1. kifejezés; 2. kifejezés; 3. kifejezés)) do ... ... kész

Itt, 1. kifejezés az indexváltozó(k) inicializálása. 2. kifejezés az a feltétel, amikor ki kell lépni a hurokból; ezt a feltételt minden iterációban ellenőrizzük. 3. kifejezés megadja az indexváltozó(k) értékének növelését/csökkentését/módosítását

A következő példa egyszerűen kiírja a 0 és 4 közötti értékeket:

for ((i=0;i<5;i++)) do echo $i kész

A következő példa egy végtelen ciklust hoz létre, mivel nincs megadva kifejezés:

for (( ; ; )) do echo "Nyomja le a Ctrl-C billentyűket a leállításhoz" kész

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.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi kész

A fenti ciklus 0 és 4 közötti számokat fog kiírni. Amikor 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. Például a következő ciklus megszakad, ha és amikor üres fájlt talál.

a fájlhoz az `ls` do flen=`wc -c $file` if [[ "$flen" = "0 $file" ]] then echo "$file üres" break else echo $flen fi kész 

A parancs wc -c kiírja a sorok számát a fájlban . A formátumban nyomtatja ki , például, 10 teszt.txt. Akkor lépünk ki a ciklusból, ha a sorok száma 0, azaz egy üres fájl.

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

A C-hez és sok más programozási nyelvhez hasonlóan a bash is rendelkezik a folytatni utasítással, hogy kihagyja az iteráció fennmaradó részét a ciklusban, ha egy adott feltétel teljesül.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then folytassa fi echo $i; Kész

A fenti ciklus 0 és 10 közötti számokat nyomtat, kivéve 5-öt, mert az iteráció során i=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 i=6.

A következő példában kiírjuk a sorok számát egy fájlban, és egy adott iteráció fog folytatni ha ez egy könyvtár és nem egy fájl.

az `ls`-ben lévő fájl esetén tegye ha [[ -d $file ]], akkor folytassa fi wc -c "$file" kész

[[ -d $fájl ]] ellenőrzi, hogy a fájl könyvtár-e. Ha igen, akkor átugrunk a következő fájlra, azaz a következő iterációra. Ha nem könyvtárról van szó, akkor a fájlban lévő sorok számát a segítségével nyomtatjuk ki WC parancsot, ahogy korábban is látható volt.

Hurok használata: Scriptek és parancssor

A ciklus szintaxisa használható közvetlenül a Bash shellben vagy egy shell script fájlból. Egyszer számára 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 számára A ciklus a Bashban egy meglehetősen egyszerű funkció, de szinte minden bonyolult szkriptelési forgatókönyvben használható. Ennek elsajátítása hosszú utat jár be, akár rendszeres, akár haladó Linux-felhasználó vagy, akár kezdi megtanulni az automatizálást a rendszeradminisztrációs és a DevOps-feladatokhoz.