A Bash szkriptek a feladatok automatizálásának rendkívül hatékony eszközei, különösen azok, amelyek kihasználják a többi meglévő program előnyeit. Ez az automatizálás gyakran megköveteli egy hasonló művelet többszöri megismétlését, pontosan ott, ahol a hurokhoz jön a saját.
A Linux és a Mac rendszergazdái általában ismerik a terminálon keresztüli parancsfájlok készítését, de még a Windows felhasználók is tudják kezdje el a műveletet a Windows alrendszer Linux alatt.
Nincs idő a Linux használatára, hogy másik számítógépre váltson, vagy virtuális gépet futtasson? Futtassa a Linuxot a Windows 10 rendszerben egy Bash shell terminál helyett!
Hogyan működnek a Bash szkriptek
A bash szkript egyszerűen egy egyszerű szöveges fájl, amely parancsok sorozatát tartalmazza, amelyeket a bash shell el tud olvasni és végrehajtani. A Bash az alapértelmezett shell a pre-Catalina macOS-ban és a legtöbb Linux-disztribúcióban.
Ha még soha nem dolgozott egy shell szkriptel, akkor a legegyszerűbb esetben kell kezdenie. Ez lehetővé teszi a kulcsfogalmak gyakorlását, beleértve a szkript létrehozását és végrehajtását.
Először hozza létre a következő fájlt egy kényelmes helyen (ideális esetben nyisson meg egy terminált, és először lépjen a kívánt könyvtárba):
#! / bin / bash
"Hello, világ" visszhang
Az első sor megmondja, hogy a program melyik futtatja, hogyan kell futtatni (azaz a bash tolmács használatával). A második csak egy parancs, mint bármely más, amelyet megadhat a parancssorban. Mentse a fájlt hello_world.sh, azután:
$ chmod + x hello_world.sh
$ ./hello_world.sh
A chmod az első sorban lévő parancs futtathatóvá teszi a fájlt, vagyis a neve begépelésével futtatható, mint a második sorban.
Ha azt látja, hogy a terminálon egy sorra nyomtatva jelenik meg a „Hello, Világ” szó, akkor minden a szükséges módon működik.
Hogyan működik a hurok
Általában a hurok két fő típusa létezik: numerikus és az egyes. A numerikus típus hagyományosan a legelterjedtebb, de a bash használatban általában fordítva történik.
A hurkok numerikus jellemzően egyetlen egész számra összpontosít, amely meghatározza, hogy hány iterációt hajtanak végre, például:
for (i = 0; i <100; i ++) {
/ * ismétlődően végrehajtandó utasítások * /
}
Ez egy jól ismert ciklus, amely pontosan 100-szor fog ismétlődni, hacsak az i nem változik meg a cikluson belül, vagy ha egy másik utasítás miatt a for ciklus végrehajtása leáll.
A Foreach hurkok ezzel ellentétben általában olyan struktúrákon működnek, mint a listák vagy tömbök, és a gyűjtemény minden elemét iterálják:
emberek = ["Péter", "Pál", "Mária"]
foreach (emberek mint személy) {
ha (személy == "Pál") {
...
}
}
Néhány nyelv kissé eltérő szintaxist használ, amely felcseréli a gyűjtés és az elem sorrendjét:
emberek = ["Péter", "Pál", "Mária"]
for (személy az emberekben) {
ha (személy == "Pál") {
...
}
}
Mert a hurokban
Bashban az elöljáró - vagy be—Hát a gyakoribb. Az alapvető szintaxis egyszerűen:
for arg a [listában]
csináld
/ * ismétlődően végrehajtandó utasítások * /
/ * az arg értéke a $ arg * / használatával nyerhető
Kész
Például három kifejezetten megnevezett fájlon keresztüli ismétléshez:
fájlhoz egy.c kettő.c három.c
csináld
ls "$ file"
Kész
Ha ilyen fájlok vannak az aktuális könyvtárban, akkor a parancsfájl kimenete a következő lesz:
egy.c
kettő.c
három.c
Rögzített fájlkészlet helyett a listát glob globális mintával lehet megszerezni (amely tartalmaz helyettesítő karaktereket - speciális karaktereket, amelyek más karaktereket képviselnek). A következő példában a for ciklus minden fájlt iterál (az aktuális könyvtárban), amelyek neve ".xml" végződésű:
fájlhoz * .xml fájlban
csináld
ls -l "$ file"
Kész
Íme néhány példa a kimenetre:
$ -rw-r - r-- 1 bobby staff 2436 2019. november 3. feed.xml
$ -rw-r - r-- 1 bobby személyzet 6447 október 27. 16:24 sitemap.xml
Ez nagyon hasonlíthat egy hosszú távú módra:
$ ls -l * .xml
De van egy jelentős különbség: a for ciklus végrehajtja a ls programozzon 2 külön alkalommal, minden alkalommal egyetlen fájlnévvel. A külön ls példában a glob minta (* .xml) először illeszkedik a fájlnevekhez, majd mindegyiket egyedi parancssori paraméterként elküldi a ls.
Itt van egy példa, amely a WC (szószám) program a különbség nyilvánvalóbbá tételéhez:
$ wc -l * .xml
44 feed.xml
231 webhelytérkép.xml
Összesen 275
A WC program külön számolja az egyes fájlok sorainak számát, majd mindegyikre kinyomtatja a teljes számot. Ezzel szemben, ha WC for cikluson belül működik:
fájlhoz * .xml fájlban
csináld
wc -l $ fájl
Kész
Továbbra is láthatja az egyes fájlok számát:
44 feed.xml
231 webhelytérkép.xml
De nincs átfogó összesítés, mert WC külön-külön fut, minden alkalommal, amikor a hurok ismétlődik.
Amikor a lista nem lista
Nagyon egyszerű és gyakori hiba van a hurkok kezelésében, annak a módnak köszönhetően, hogy a bash kezeli az idézett argumentumokat / húrokat. A fájlok listájának áttekintése a következőképpen történhet:
fájlhoz egy.c kettőben.c
Nem így:
az "one.c two.c" fájlba
A második példa dupla idézőjelek közé csatolja a fájlneveket, ami csak egyetlen paraméterrel rendelkező listát eredményez; a for ciklus csak egyszer fog végrehajtani. Ez a probléma elkerülhető egy változó használatával az ilyen esetekben:
FILES = "one.c two.c"
fájlhoz a $ FILES fájlban
csináld
...
Kész
Vegye figyelembe, hogy a változó deklarációnak önmagában is dupla idézőjeleket kell tartalmaznia!
Lista nélkül
Mivel nincs mit iterálni, a for ciklus működik azon a parancssoron, amelyet a parancsfájlnak megadtak, amikor meghívták. Például, ha van egy megnevezett szkripted args.sh a következőket tartalmazza:
#! / bin / sh
a
csináld
visszhang $ a
Kész
Ezután az args.sh futtatásával a következőket kapja:
$ ./args.sh egy kettő három
egy
két
három
Bash felismeri ezt az esetet, és kezel egy tettre mint annak megfelelője egy $ @ do-ban ahol $ @ egy speciális változó, amely parancssori argumentumokat képvisel.
Hagyományos numerikus emulálása a hurok számára
A Bash szkriptek gyakran fájlok listáival vagy más parancsok kimeneti soraival foglalkoznak, így a for in ciklus gyakori. A hagyományos c-stílusú művelet azonban továbbra is támogatott:
for ((i = 1; i <= 5; i ++))
csináld
visszhang $ i
Kész
Ez a klasszikus forma három részből áll, amelyekben:
- egy változó inicializálódik (i = 1), amikor a ciklus először találkozik
- a hurok addig folytatódik, amíg a feltétel (i <= 5) igaz
- a ciklus során minden alkalommal növekszik a változó (i ++)
Két érték közötti ismétlés elég általános követelmény, hogy van rövidebb, kissé kevésbé zavaró alternatíva:
i-re itt: {1..5}
csináld
visszhang $ i
Kész
A merevítő kiterjesztése, amely megtörténik, a fentieket a ciklusra hatékonyan fordítja:
i-re az 1 2 3 4-ben
Finomabb hurokszabályozás töréssel és folytatással
A bonyolultabb hurkok esetében gyakran szükség van a korai kilépésre vagy a fő hurok azonnali újraindítására a következő értékkel. Ehhez a bash kölcsönveszi a többi programozási nyelvben megszokott break és folytatás utasításokat. Íme egy példa, amely mindkettőt használja az első, több mint 100 karakter hosszú fájl megkeresésére:
#! / bin / bash
fájlhoz *
csináld
ha [! -f "$ file"]
azután
echo "A $ fájl nem fájl"
folytatni
fi
num_chars = $ (wc -c Az echo $ fájl "$ num_chars karakter hosszú"
ha [$ num_chars -gt 100]
azután
echo "Found $ file"
szünet
fi
Kész
A for ciklus itt az aktuális könyvtár összes fájlján működik. Ha a fájl nem normál fájl (pl. Ha könyvtár), akkor a folytatás utasítással a ciklus újraindítható a következő fájllal. Ha ez egy normál fájl, akkor a második feltételes blokk meghatározza, hogy 100-nál több karaktert tartalmaz-e. Ha igen, akkor a break utasítást arra használják, hogy azonnal elhagyja a for ciklust (és elérje a szkript végét).
Következtetés
A bash szkript egy végrehajtható utasításkészletet tartalmazó fájl. Az A for ciklus lehetővé teszi egy szkript egy részének sokszoros megismétlését. Változók, külső parancsok, valamint a break and Contin utasítások használatával a bash szkriptek bonyolultabb logikát alkalmazhatnak, és sokféle feladatot hajthatnak végre.
A jelentés azt sugallja, hogy az Apple alkalmazásainak adatvédelmi címkéivel lehetnek problémák.
- Programozás
- Linux
Bobby technológiai rajongó, aki szoftverfejlesztőként dolgozott a két évtized alatt. Szenvedélyesen játszik a játékokkal, a Switch Player Magazine Véleményszerkesztőjeként dolgozik, és elmerül az online kiadványok és webfejlesztés minden aspektusában.
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz, amely műszaki tippeket, véleményeket, ingyenes e-könyveket és exkluzív ajánlatokat tartalmaz!
Még egy lépés…!
Kérjük, erősítse meg e-mail címét az imént elküldött e-mailben.