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.

Hogyan szerezhetem meg a Linux Bash Shell-t Windows 10 rendszeren

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.

instagram viewer

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:

  1. egy változó inicializálódik (i = 1), amikor a ciklus először találkozik
  2. a hurok addig folytatódik, amíg a feltétel (i <= 5) igaz
  3. 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.

Email
Az Apple App adatvédelmi címkéi nem lehetnek teljesen pontosak

A jelentés azt sugallja, hogy az Apple alkalmazásainak adatvédelmi címkéivel lehetnek problémák.

Kapcsolódó témák
  • Programozás
  • Linux
A szerzőről
Bobby Jack (19 cikk megjelent)

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.

Bobby Jacktől többet

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.

.