Minden programnak hibamentesnek kell lennie, mielőtt eléri a fogyasztókat. A szoftverfejlesztők mindent megtesznek annak érdekében, hogy a szoftverprogramok hibamentesek legyenek. De nehéz hibátlan kódot csinálni, ha több ezer sor van. A hibakeresés folyamatos folyamat; segít a hibák azonnali észlelésében, a kóddal kapcsolatos értékes információk összegyűjtésében és a redundáns kóddarabok kiküszöbölésében.
Minden programozási nyelvnek van néhány közös és kevés különálló megközelítése a hibák keresésére. Például a hibakeresési programok segítségével gyorsan eltávolíthatók a hibák. Míg a shell scriptelésnek nincs külön eszköze a kód hibakereséséhez. Ez az írás a különböző hibakeresési technikák megvitatásáról szól, amelyekkel a bash script hibamentessé tehető. Mielőtt belemerülnénk a módszerekbe, ismerjük meg alaposan a shell -eket és a shell scripteket:
Mi a héj Linuxon?
Amikor elindítja a számítógépet, a kernel információt kap a csatolt hardverről, és lehetővé teszi más csatlakoztatott összetevők kölcsönhatását. Ezenkívül kezeli a memóriát, a CPU -t és felismer minden új perifériát. Mindent összevetve a kernel minden operációs rendszer gerincét képezi. De valaha is gondolt arra, hogy közvetlenül kapcsolatba lépjen a kernellel, parancsot adjon neki egy adott feladat elvégzésére? Ez egyáltalán megvalósítható? Teljesen! Egy héj, egy interaktív felületű számítógépes program segítségével bárki működtetheti a kernelt. A héj lehetővé teszi az emberek számára, hogy kölcsönhatásba lépjenek a kernellel, és utasítsák bármely feladat elvégzésére.
A Unixban két fő héj létezik Bourne kagyló és C héj . Mindkét típusnak megvannak az alkategóriái. Különböző típusú Bourne kagylók vannak Korn héj (ksh), Almquist héj (hamu), Bourne ismét héj (bash), és Z héj (zsh) . Ugyanakkor a C héjnak saját alkategóriái vannak, mint például C héj (csh) és TENEX C héj (tcsh) . Amint fentebb említettük, az összes kagyló közül Bash (Bourne ismét héja) a legszélesebb körben használt shell, és sok Linux disztribúcióban kerül a dobozba a hatékonyság és a felhasználóbarát jelleg miatt.
A Bash számos Linux disztribúció alapértelmezett héja, és több millió Linux -felhasználó használja széles körben. Annyira változatos és befolyásos, hogy képes elvégezni minden olyan feladatot, amelyet általában GUI-alapú alkalmazásokban végez. Fájlokat szerkeszthet, fájlokat kezelhet, fényképeket tekinthet meg, zenét hallgathat, videókat lejátszhat és még sok minden mást tehet.
Mi az a Shell Script:
Ahogy megtanultuk a shell alapötletét, most menjünk a shell scripteléshez. A shell script egy számítógépes program, amely több parancsot hajt végre egy shell -ben, és tolmácsként működik egy adott funkció végrehajtásához. Amint azt fentebb tárgyaltuk, 2 különleges típusú kagyló létezik. Ez az útmutató azonban a Bourne Again héjra (Bash) összpontosít.
Tehát mi az a bash script? Linux alatt az összes bash parancs benne van tárolva /usr /bin és /bin mappák. Például, amikor futtat egy parancsot, a bash azt keresi, hogy létezik -e a könyvtárban vagy sem. A parancs akkor hajtódik végre, ha a könyvtárakban megtalálják, hogy más hibát ad.
Mit szólna egy olyan feladat végrehajtásához, amelynek több parancsra van szüksége a terminálon történő futtatáshoz? Ebben a konkrét helyzetben a bash script segíthet. A Bash szkriptelés a shell parancsfájlok egyik formája, amely lehetővé teszi, hogy a programokat több bash parancs futtatására késztesse egy adott feladat elvégzésére.
Mik a hibák a bash scriptelésben:
A bash szkripteléssel vagy más programozási nyelvekkel való munkavégzés során sok hibával találkozhat. A hiba olyan hiba vagy hiba a programban, amely miatt a program helytelenül viselkedhet.
Minden programozási nyelvnek megvan a maga eljárása a hibák megtalálására; hasonlóképpen a bash számos beépített opcióval rendelkezik egy terminál program hibakereséséhez.
A hibák kezelése és a program hibakeresése nem kevesebb, mint gond. Ez időigényes feladat, és súlyosbodhat, ha nincs tisztában a megfelelő eszközökkel a program hibakereséséhez. Ez az írás egy teljes útmutató a bash-szkriptek hibakereséséhez, hogy a szkript hibamentes legyen. Tehát kezdjük:
A bash szkript hibakeresése:
Ha nagy programozási projekteken dolgozik, sok hibával vagy hibával találkozik. A program hibakeresése néha bonyolult lehet. A programozók általában hibakeresési eszközöket használnak, és sok kódszerkesztő is segít a hibakeresésben a szintaxis kiemelésével.
A Linuxban számos eszköz létezik a kódok hibakeresésére, például a GNU Debugger aka gdb. Az olyan eszközök, mint a GDB, hasznosak a bináris fájlokba fordító nyelvek programozásában. Mivel a bash egyszerű értelmezett nyelv, nincs szükség nehéz eszközökre a hibakereséshez.
A bash szkriptkód hibakeresésére számos hagyományos technika létezik, és az egyik a hozzáadás Állítások. Az állítások olyan feltételek, amelyeket hozzáadnak a programokhoz, hogy ellenőrizzék a konkrét feltételeket, és ennek megfelelően hajtsák végre a programot. Ez egy védekező technika, amely segít a hibák megtalálásában és a tesztelésben is. Sokat találhat eszközöket amelyek elősegítik az állítások hozzáadását a bash szkriptekhez.
Nos, az állítások hozzáadása az egyik régi hagyományos technika. A bash -ban a zászlók/opciók állnak rendelkezésre a bash szkript hibakereséséhez. Ezek az opciók hozzáadhatók a shebang -mal együtt a szkriptekben, vagy a program végrehajtása közben a terminálban. Az alábbiakban felsoroljuk azokat a témákat, amelyeket fel fogunk venni:
- A bash szkript hibakeresése az engedélyezéssel bőbeszédű -v választási lehetőség
- A bash szkript hibakeresése a használatával xtrace -x választási lehetőség
- A bash szkript hibakeresése a használatával noexec -n választási lehetőség
- Hogyan lehet azonosítani a unset változók bash szkript hibakeresése közben
- Hogyan hibakeresés a konkrét részt a bash szkriptből
- Egy bash szkript hibakeresése a csapda parancs
- Hogyan lehet a bash szkriptet hibakereséssel kiküszöbölni iratgyűjtés használni a -f választási lehetőség
- Hogyan kell kombájn hibakeresési lehetőségek egy shell parancsfájl hibakereséséhez
- Hogyan kell átirányítási hibakeresési jelentés fájlba
Tehát nézzük meg a bash különböző technikáit a bash szkript hibakereséséhez:
1. A bash szkript hibakeresése a verbose -v beállítás engedélyezésével:
A bash szkript hibakeresésének egyik legegyszerűbb módja a -v opció, más néven bőbeszédű. Az opció hozzáadható a shebang használatával, vagy kifejezetten a parancsfájl nevével a végrehajtás során. A bőbeszédű opció végrehajtja és kinyomtatja a kód minden sorát, mint a tolmács folyamatát. Értsük meg egy bash script példával:
#! /bin/bashkidobta 'Írja be a számot1'
olvasszám1
kidobta 'Írja be a számot2'
olvas2. számú
ha [ '$ szám1' -gt '$ szám2' ]
azután
kidobta 'A szám1 nagyobb, mint a szám2'
elif [ '$ szám1' -eq '$ szám2' ]
azután
kidobta 'A szám1 megegyezik a számmal'
más
kidobta 'A szám2 nagyobb, mint a szám1'
lenni
A fenti kód két számot kap a felhasználótól, majd feltételes utasításokat hajt végre annak ellenőrzésére, hogy a szám jelentősebb, kisebb vagy egyenlő -e a másik megadott számmal. Bár bármilyen szövegszerkesztő használható bash szkriptelésre, én a Vim szerkesztőt használom. A Vim egy hatékony, funkciókban gazdag szerkesztő, amely kiemeli a bash parancsfájlok szintaxisát, és csökkenti a szintaktikai hibák esélyét. Ha nincs Vim szerkesztője, akkor szerezze be az alábbi parancs futtatásával:
$sudotalálótelepítés jöttemHozzon létre egy bash parancsfájlt a következők használatával:
$jöttemb_script.shHa még nem ismeri a Vim szerkesztőt, javaslom, hogy tanuljon hogyan kell használni a vim szerkesztőt eljárás előtt.
Most, visszatérve a szkripthez, futtassa a parancsfájlt a segítségével -v választási lehetőség:
$bash -vb_script.sh
A fenti kimeneten látható, hogy a szkript minden sora kinyomtatásra kerül a terminálban, miközben az értelmező feldolgozza őket. Ne feledje, hogy a szkript leállítja a felhasználói bevitelt, majd feldolgozza a szkript következő sorát. Amint fentebb tárgyaltuk, hogy a -v opció a shebang után helyezhető el, az alábbiak szerint:
#! / bin / bash -v
Hasonlóképpen, a részletes jelző is hozzáadható a shebang következő sorába a készlet parancs:
#! /bin/bashkészlet -v
A fent tárgyalt módszerek bármelyike lehetővé teszi a bőbeszédűséget.
2 A bash szkript hibakeresése az xtrace -x opció használatával:
A végrehajtási nyomkövetés, más néven xtrace egy okos és hasznos hibakeresési lehetőség, különösen a logikai hibák nyomon követésére. A logikai hibák általában változókhoz és parancsokhoz kapcsolódnak. A változó állapotának ellenőrzéséhez a parancsfájl végrehajtása során a -x választási lehetőség. Most ismét futtassa a b_script.sh fájlt a -x zászló:
$bash -xb_script.sh
A kimenet kifejezetten mutatja az egyes változók értékét a végrehajtási folyamat során. Ismét a -x használható a shebang mellett és a shebang sor után a set paranccsal. Az xtrace a + jelet írja a szkript minden sorába.
3 A bash szkript hibakeresése a noexec -n opció használatával:
A szintaktikai hibák a hibák egyik elsődleges okai. A bash szkript szintaktikai hibakereséséhez használjuk noexec (nincs végrehajtás) mód. A noexec módhoz használt opció az -n. Csak a kód szintaktikai hibáit jeleníti meg a végrehajtás helyett. Sokkal biztonságosabb módszer a kód hibakeresésére. Végezzük el b_script.sh ismét a -n választási lehetőség:
$bash -nb_script.shHa nincs szintaktikai hiba, a kód nem hajtódik végre. Most módosítsuk a kódunkat:
#! /bin/bashkidobta 'Írja be a számot1'
olvasszám1
kidobta 'Írja be a számot2'
olvas2. számú
ha [ '$ szám1' -gt '$ szám2' ]
azután
kidobta 'A szám1 nagyobb, mint a szám2'
elif [ '$ szám1' -eq '$ szám2' ]
#azután
kidobta 'A szám1 megegyezik a számmal'
más
kidobta 'A szám2 nagyobb, mint a szám1'
lenni
Hozzászólok azután után elif . Most -n végrehajtással b_script.sh forgatókönyv:
$bash -nb_script.sh
A várakozásoknak megfelelően egyértelműen azonosította a hibát, és megjelenítette a terminálon.
4 Hogyan lehet azonosítani a beállítatlan változókat a bash szkript hibakeresése közben:
Gyakori, hogy a gépelés közben hibás a kódírás. Gyakran rosszul ír be egy változót, ami nem engedi a kód végrehajtását. Az ilyen hiba azonosításához a -u választási lehetőség. Módosítsuk újra a kódot:
#! /bin/bashkidobta 'Írja be a számot1'
olvasszám1
kidobta 'Írja be a számot2'
olvas2. számú
ha [ '$ num1' -gt '$ szám2' ]
azután
kidobta 'A szám1 nagyobb, mint a szám2'
elif [ '$ szám1' -eq '$ szám2' ]
azután
kidobta 'A szám1 megegyezik a számmal'
más
kidobta 'A szám2 nagyobb, mint a szám1'
lenni
Az elsőben ha feltételes nyilatkozatot, átneveztem a szám1 változó szám1 . Most szám1 beállítás nélküli változó. Most futtassa a szkriptet:
$bash -ub_script.sh
A kimenet azonosította és kifejezetten megjeleníti a beállítatlan változó nevét.
5. A bash szkript adott részének hibakeresése:
Az xtrace mód feldolgozza a kód minden sorát, és kimenetet ad. A hibák megtalálása egy nagy kódban azonban időigényes lenne, ha már tudjuk, hogy melyik rész okozza a hibát. Szerencsére az xtrace lehetővé teszi a kód egy bizonyos részének hibakeresését is, ami a készlet parancs. Hely set -x annak a résznek az elején, amelyet hibakeresni kell, majd set +x a végén. Például a (z) feltételes állításait szeretném hibakeresni b_script.sh , ezért minden feltételes állítást mellékelek set -x és set +x az alábbi kódban látható lehetőségek:
#! /bin/bashkidobta 'Írja be a számot1'
olvasszám1
kidobta 'Írja be a számot2'
olvas2. számú
készlet -x
ha [ '$ szám' -gt '$ szám2' ]
azután
kidobta 'A szám1 nagyobb, mint a szám2'
elif [ '$ szám1' -eq '$ szám2' ]
azután
kidobta 'A szám1 megegyezik a számmal'
más
kidobta 'A szám2 nagyobb, mint a szám1'
lenni
készlet+ x
Most futtassa a szkriptet a használatával bash b_script.sh .
A kimenet csak a megadott feltételek mellett hibakeresést végez.
6. A bash szkript hibakeresése a trap paranccsal:
Ha a szkript bonyolult, akkor vannak bonyolultabb technikák is a hibakereséshez. Egyikük a csapda parancs. Az csapda parancs elkapja a jeleket, és parancsot hajt végre, amikor egy adott helyzet bekövetkezik. A parancs lehet jel vagy funkció. Létrehoztam egy másik szkriptet sum_script.sh :
#! /bin/bashcsapda 'echo' $ {LINENO} sor: Az első szám $ number1, a második szám $ 2 és az összeg $ összeg ''DEBUG
kidobta 'Írja be az első számot'
olvasszám1
kidobta 'Írja be a második számot'
olvas2. számú
összeg= $[szám1 + szám2]
kidobta 'az összeg$ összeg'
Az csapda paranccsal DEBUG jelzés mutatja a változók állapotát szám1 , 2. számú és összeg minden sor végrehajtása után, amint az a következő kimeneti képen látható:
A sárga blokkok üres helyek, mert a felhasználó még nem adott meg bemenetet; ezek a helyek megtelnek, amint a felhasználó megadja az értékeket. Ez a módszer nagyon hasznos a bash szkriptek hibakeresésében is.
7. Hogyan lehet hibakeresni egy bash szkriptet, ha megszüntetjük a fájlgömböt a -f opció használatával:
A fájlkeresés egy folyamat, amely megkeresi a helyettesítő karaktereket tartalmazó fájlokat, azaz * és ? . A hibakeresés során sok esetben nem kell kiterjesztenie a fájlokat. Ilyen esetekben letilthatja a fájl globálását a -f választási lehetőség. Értsük meg egy forgatókönyvvel fglobe_script.sh :
#! /bin/bashkidobta 'Az összes szöveges fájl megjelenítése.'
ls *.txt
A fenti kód megjeleníti az aktuális könyvtár összes szövegfájlját, hajtsa végre:
$bashfglobe_script.sh
A fájlcsökkentés kikapcsolásához használja a -f választási lehetőség:
$bash -ffglobe_script.sh
Hasonlóképpen használhatja a shebang és a készlet parancsot is:
#! /bin/bashkidobta 'Az összes szöveges fájl megjelenítése.'
ls *.txt
készlet -f
kidobta 'Az összes szöveges fájl megjelenítése'
ls *.txt
készlet+f
Na, fuss bash fglobe_script.sh:
A mellékelt rész set -f/set +f beállítások nem dolgozta fel a helyettesítő karakterekkel ellátott parancsokat.
8. A hibakeresési lehetőségek kombinálása a shell script hibakeresésével:
A fent említett hibakeresési technikákban csak egy lehetőséget használunk, de a jobb megértés érdekében különféle lehetőségeket kombinálhatunk. Végezzük el -x és -v lehetőségek a sum_script.sh forgatókönyv. Használom a sum_script.sh forgatókönyv.
#! /bin/bashkidobta 'Írja be az első számot'
olvasszám1
kidobta 'Írja be a második számot'
olvas2. számú
összeg= $[szám1 + szám2]
kidobta 'az összeg$ összeg'
Most hajtsa végre:
$bash -xvsum_script.sh
Mindkét -x és -v a kimenetek kombinálva vannak, ahogy az a kimeneti képen is megjelenik. Hasonlóképpen kombinálhatjuk a -u opció részletes -v hibakereséssel. Lecserélem a szám1 változó az egyiken a forgatókönyv hatodik sorában:
#! /bin/bashvan$ szám2ésösszegvan$ összeg'' DEBUG
kidobta 'Írja be az első számot'
olvassa el az 1 -es számot
kidobta 'Írja be a második számot'
olvassa el a 2 -es számot
összeg = $ [szám + szám2]
kidobta 'azösszegvan$ összeg'
A kimenet megtekintéséhez futtassa az alábbi parancsot:
$bash -uvsum_script.sh
9. Hogyan lehet átirányítani a hibakeresési jelentést egy fájlba:
A bash szkript hibakeresési jelentésének fájlba mentése sok esetben hasznos lehet. Ez egy kicsit trükkös, mert a hibakeresési jelentést egy fájlba kell átirányítani; néhány speciális változót használunk. Hajtsuk végre b_script.sh kód:
#! /bin/bashvégrehajt 5>dubug_report.log
BASH_XTRACED=„5”
PS4='$ LINENO--'
kidobta 'Írja be a számot1'
olvasszám1
kidobta 'Írja be a számot2'
olvas2. számú
ha [ '$ szám' -gt '$ szám2' ]
azután
kidobta 'A szám1 nagyobb, mint a szám2'
elif [ '$ szám1' -eq '$ szám2' ]
azután
kidobta 'A szám1 megegyezik a számmal'
más
kidobta 'A szám2 nagyobb, mint a szám1'
lenni
A kód második sorában látható, hogy a kimenetet átirányítjuk a debug_report.log fájlt a végrehajt parancs az 5. fájlleíróval (FD5).
exec 5> debug_report.log: Az végrehajt parancs átirányítja a shellben történteket egy fájlba debug_report.log.
BASH_XTRACEFD = 5: Ez egy egy adott bash változó és nem használható más burokban. Érvényes fájlleírót kell hozzárendelni, és a bash a kicsomagolt kimenetet írja ide debug_report.log.
PS4 = $ LINENO - ': Ez is egy bash változó, amelyet a sor számának nyomtatására használnak hibakeresés közben az xtrace módban. A PS4 alapértelmezett értéke a + jel
A fenti szkript naplófájlt hoz létre debug_report.log, olvasásához használja a macska parancs:
Következtetés:
A hibákkal teli kód hatással lehet a program teljesítményére és káros a hardverre is. A hibakeresés nagyon fontos minden program számára, mivel hatékonyabbá teszi a programot. Ha meglévő és lehetséges hibákat talál a program fejlesztése során, megakadályozhatja, hogy a program váratlanul viselkedjen. A nagy kódok általában aktív hibakeresést igényelnek, fokozva a kód hatékonyságát azáltal, hogy kiküszöbölik az igénybe vevő kódrészleteket.
Sok programozási nyelv és környezet saját kísérő hibakeresővel rendelkezik. A bash szkriptekben különféle technikák valósíthatók meg a szkript hibakereséséhez. Ez az útmutató alaposan összpontosított az összes módszerre, amelyekkel hibákat találhat a bash parancsfájlokban. Tehát amikor úgy érzi, hogy a bash szkriptje nem a várt módon viselkedik, használja a fent említett technikák bármelyikét, de az xtrace mód (-x) a legtöbb esetben nagyon hasznos.