Ako ladiť bash skript?

How Debug Bash Script




Každý program musí byť bez chýb, kým sa dostane k spotrebiteľom. Vývojári softvéru sa všemožne snažia, aby boli softvérové ​​programy bez chýb. Je však ťažké urobiť kód bezchybným, keď existujú tisíce riadkov. Ladenie je prebiehajúci proces; pomáha pri okamžitom zisťovaní chýb, zhromažďovaní cenných informácií o kóde a odstraňovaní nadbytočných kúskov kódu.

Všetky programovacie jazyky majú niekoľko bežných a niekoľko odlišných prístupov k hľadaniu chýb. Na rýchle odstránenie chýb je možné napríklad použiť ladiace programy. Zatiaľ čo shell skriptovanie nemá žiadny konkrétny nástroj na ladenie kódu. Tento zápis je o diskusii o rôznych technikách ladenia, ktoré je možné použiť na zabezpečenie bezchybnosti skriptu bash. Predtým, ako sa ponoríme do týchto metód, urobme si základné znalosti o škrupinách a skriptovaní škrupín:







Aký je shell v Linuxe?

Keď spustíte počítač, jadro získa informácie o pripojenom hardvéri a umožní interakcii s inými pripojenými komponentmi. Okrem toho spravuje pamäť, procesor a rozpoznáva všetky nové periférie. Celkovo je jadro chrbticou akéhokoľvek operačného systému. Ale napadlo vás niekedy komunikovať priamo s jadrom, prikázať mu vykonávať konkrétnu úlohu? Je to vôbec uskutočniteľné? Absolútne! Pomocou shellu, počítačového programu s interaktívnym rozhraním, môže jadro ovládať každý. Plášť umožňuje ľuďom interakciu s jadrom a pokyn mu, aby vykonal akúkoľvek úlohu.



V Unixe existujú dve hlavné škrupiny Bourneova škrupina a C škrupina . Oba tieto typy majú svoje podkategórie. Existujú rôzne druhy mušlí Bourne Korn shell (ksh), Almquist shell (popol), Bourne opäť shell (bash), a Z shell (zsh) . Plášť C má zároveň svoje vlastné podkategórie ako C shell (csh) a Plášť TENEX C. (tcsh) . Ako bolo uvedené vyššie, zo všetkých škrupín Bash (Bourne opäť shell) je najpoužívanejší shell a vychádza z krabice v mnohých distribúciách Linuxu kvôli jeho účinnosti a užívateľskej príjemnosti.



Bash je predvolený shell mnohých distribúcií Linuxu a vo veľkej miere ho používajú milióny používateľov Linuxu. Je tak rozmanitý a vplyvný, že dokáže vykonať každú úlohu, ktorú zvyčajne vykonávate v aplikáciách založených na GUI. Môžete upravovať súbory, spravovať súbory, zobrazovať fotografie, počúvať hudbu, prehrávať videá a oveľa viac.





Čo je skript Shell:

Keď sme sa naučili základnú myšlienku shellu, prejdime teraz k skriptovaniu shellu. Shell skript je počítačový program, ktorý vykonáva viacero príkazov v shelle, ktorý slúži ako tlmočník na vykonávanie konkrétnej funkcie. Ako bolo uvedené vyššie, existujú 2 konkrétne typy škrupín. Táto príručka sa však zameriava na shell Bourne Again (Bash).
Čo je to teda bash skript? V systéme Linux sú všetky príkazy bash uložené v /usr /bin a /bin priečinky. Napríklad pri každom spustení príkazu bash hľadá, či sa v adresári nachádza alebo nie. Príkaz sa spustí, ak zistí, že v adresároch else dáva chybu.

Čo tak vykonať úlohu, ktorá na spustenie v termináli vyžaduje viac príkazov? V tejto konkrétnej situácii vám môže pomôcť skriptovanie bash. Bash skriptovanie je forma shell skriptovania, ktoré vám umožňuje vytvárať programy na spustenie viacerých príkazov bash na vykonanie konkrétnej úlohy.



Aké sú chyby v skripte bash:

Pri práci so skriptovaním bash alebo s inými programovacími jazykmi sa stretávate s mnohými chybami. Chyba je chyba alebo chyba v programe, ktorá môže spôsobiť, že sa program bude správať nesprávne.

Každý programovací jazyk má svoj vlastný postup na hľadanie chýb; podobne má bash tiež mnoho vstavaných možností na ladenie terminálového programu.

Správa chýb a ladenie programu nie je nič menej ako problémy. Je to časovo náročná práca a môže sa zhoršiť, ak nepoznáte správne nástroje na ladenie programu. Tento zápis je kompletným sprievodcom ladením skriptov bash, aby bol váš skript bez chýb. Začnime teda:

Ako ladiť bash skript:

Keď pracujete na veľkých programovacích projektoch, stretávate sa s mnohými chybami alebo chybami. Ladenie programu môže byť niekedy komplikované. Programátori zvyčajne používajú ladiace nástroje a mnoho editorov kódu tiež pomáha pri hľadaní chýb zvýraznením syntaxe.

V Linuxe existujú rôzne nástroje na ladenie kódov, napríklad GNU Debugger aka gdb. Nástroje ako GDB sú nápomocné pri programovaní jazykov, ktoré sa kompilujú do binárnych súborov. Pretože bash je jednoduchý interpretovaný jazyk, nie sú potrebné ťažké nástroje na jeho ladenie.

Na ladenie skriptovacieho kódu bash existujú rôzne tradičné techniky a jednou z nich je pridávanie Tvrdenia. Tvrdenia sú podmienky, ktoré sa pridávajú do programov, aby sa skontrolovali konkrétne podmienky a program sa podľa toho vykonal. Je to obranná technika, ktorá pomáha pri hľadaní chýb a testovaní. Môžete ich nájsť veľa nástroje ktoré pomáhajú pri pridávaní tvrdení do skriptov bash.

Pridávanie tvrdení je jednou zo starých tradičných techník. V bash sú k dispozícii sady vlajok/možností na ladenie bash skriptu. Tieto možnosti je možné pridať spolu so shebangom do skriptov alebo ich pridať pri spustení programu v termináli. Témy, ktorým sa budeme venovať, sú uvedené nižšie:

  1. Ako ladiť bash skript povolením podrobný -v možnosť
  2. Ako ladiť bash skript pomocou xtrace -x možnosť
  3. Ako ladiť bash skript pomocou noexec -n možnosť
  4. Ako identifikovať nenastavené premenné pri ladení bash skriptu
  5. Ako ladiť súbor konkrétna časť bash skriptu
  6. Ako ladiť bash skript pomocou pasca príkaz
  7. Ako ladiť bash skript odstránením globbovanie súborov pomocou -f možnosť
  8. Ako kombinovať možnosti ladenia na ladenie skriptu shell
  9. Ako správa o ladení presmerovania do súboru

Pozrime sa teda na rôzne techniky v bash na ladenie bash skriptu:

1. Ako ladiť skript bash povolením možnosti verbose -v:

Jeden z najľahších prístupov k ladeniu skriptu bash je -v možnosť, známa aj ako podrobná. Voľbu je možné pridať k shebangu alebo explicitne vložiť k názvu súboru skriptu pri jeho vykonávaní. Podrobná voľba vykoná a vytlačí každý riadok kódu ako proces tlmočníka. Poďme to pochopiť pomocou príkladu bash skriptu:

#! /bin/bash
zahodil „Zadajte číslo 1“
čítaťčíslo 1
zahodil „Zadajte číslo 2“
čítaťčíslo2
keby [ '$ number1' -gt '$ number2' ]
potom
zahodil „Číslo1 je väčšie ako číslo2“
elif [ '$ number1' -ekv '$ number2' ]
potom
zahodil „Číslo1 sa rovná číslu2“
inak
zahodil „Číslo2 je väčšie ako číslo1“
byť

Vyššie uvedený kód získava od používateľa dve čísla a potom vykonáva určité podmienené príkazy, aby skontroloval, či je číslo významnejšie, menšie alebo sa rovná druhému zadanému číslu. Aj keď na skriptovanie bash možno použiť akýkoľvek textový editor, používam editor Vim. Vim je výkonný editor bohatý na funkcie, ktorý zvýrazňuje syntax skriptov bash a znižuje pravdepodobnosť chýb syntaxe. Ak nemáte editor Vim, získajte ho spustením príkazu uvedeného nižšie:

$sudovýstižnýInštalácia Prišiel som

Vytvorte súbor skriptu bash pomocou:

$Prišiel somb_script.sh

Ak ste novým editorom Vim, odporúčam vám, aby ste sa poučili ako používať editor vim pred pokračovaním.

Teraz späť k skriptu, spustite skript pomocou -v možnosť:

$bash -vb_script.sh

Na vyššie uvedenom výstupe je vidieť, že každý riadok skriptu je vytlačený v termináli počas spracovania tlmočníkom. Všimnite si toho, že skript prestane prijímať vstupy od používateľa a potom spracuje ďalší riadok skriptu. Ako je uvedené vyššie, že -v možnosť je možné umiestniť za shebang, ako je znázornené na nasledujúcom obrázku:

#! / bin / bash -v

Podobne môže byť podrobný príznak pridaný aj do nasledujúceho riadku shebangu pomocou nastaviť príkaz:

#! /bin/bash
nastaviť -v

Ktorýkoľvek z vyššie uvedených spôsobov môže povoliť verbose.

2 Ako ladiť bash skript pomocou možnosti xtrace -x:

Sledovanie spustenia, tiež známe ako xtrace, je múdra a užitočná možnosť ladenia, najmä na sledovanie logických chýb. Logické chyby sú zvyčajne spojené s premennými a príkazmi. Na kontrolu stavu premennej počas vykonávania skriptu používame -X možnosť. Teraz znova spustite súbor b_script.sh súbor s príponou -X vlajka:

$bash -Xb_script.sh

Výstup počas procesu vykonávania explicitne zobrazuje hodnotu každej premennej. Opäť, -X môže byť použitý vedľa shebangu a za linkou shebangu pomocou príkazu set. Xtrace vloží znamienko + do každého riadka skriptu.

3 Ako ladiť skript bash pomocou možnosti noexec -n:

Chyby syntaxe sú jednou z hlavných príčin chýb. Na syntaktické ladenie bash skriptu používame noexec (bez vykonávania). Voľba použitá pre režim noexec je -n. Namiesto vykonávania bude zobrazovať iba chyby syntaxe kódu. Oveľa bezpečnejší prístup k ladeniu kódu. Poďme vykonať b_script.sh opäť s -n možnosť:

$bash -nb_script.sh

Bez chyby syntaxe sa kód nevykoná. Teraz upravme náš kód:

#! /bin/bash

zahodil „Zadajte číslo 1“
čítaťčíslo 1
zahodil „Zadajte číslo 2“
čítaťčíslo2
keby [ '$ number1' -gt '$ number2' ]
potom
zahodil „Číslo1 je väčšie ako číslo2“
elif [ '$ number1' -ekv '$ number2' ]
#potom
zahodil „Číslo1 sa rovná číslu2“
inak
zahodil „Číslo2 je väčšie ako číslo1“
byť

Ja sa vyjadrujem potom po elif . Teraz pomocou -n spustite b_script.sh scenár:

$bash -nb_script.sh

Podľa očakávania chybu jasne identifikoval a zobrazil v termináli.

4 Ako identifikovať nenastavené premenné pri ladení bash skriptu:

Robiť preklep pri písaní kódu je bežné. Často zadáte nesprávnu premennú, ktorá nedovolí spustenie kódu. Na identifikáciu takejto chyby používame -u možnosť. Upravme kód znova:

#! /bin/bash
zahodil „Zadajte číslo 1“
čítaťčíslo 1
zahodil „Zadajte číslo 2“
čítaťčíslo2
keby [ '$ num1' -gt '$ number2' ]
potom
zahodil „Číslo1 je väčšie ako číslo2“
elif [ '$ number1' -ekv '$ number2' ]
potom
zahodil „Číslo1 sa rovná číslu2“
inak
zahodil „Číslo2 je väčšie ako číslo1“
byť

V prvom keby podmienené vyhlásenie, premenoval som číslo 1 premenná na num1 . Teraz num1 je nenastavená premenná. Teraz spustite skript:

$bash -ub_script.sh

Výstup identifikoval a explicitne zobrazuje názov nenastavenej premennej.

5. Ako ladiť konkrétnu časť bash skriptu:

Režim xtrace spracováva každý riadok kódu a dáva výstup. Hľadanie chýb vo veľkom kóde by však bolo časovo náročné, ak už vieme, ktorá časť potenciálne spôsobuje chybu. Našťastie xtrace vám tiež umožňuje ladiť konkrétnu časť kódu, ktorú je možné vykonať pomocou nastaviť príkaz. Miesto sada -x na začiatku časti, ktorú je potrebné odladiť a potom nastaviť +x nakoniec. Napríklad chcem ladiť podmienené príkazy z b_script.sh , preto priložím všetky podmienečné vyhlásenia do sada -x a nastaviť +x možnosti uvedené v nasledujúcom kóde:

#! /bin/bash
zahodil „Zadajte číslo 1“
čítaťčíslo 1
zahodil „Zadajte číslo 2“
čítaťčíslo2
nastaviť -X
keby [ '$ číslo' -gt '$ number2' ]
potom
zahodil „Číslo1 je väčšie ako číslo2“
elif [ '$ number1' -ekv '$ number2' ]
potom
zahodil „Číslo1 sa rovná číslu2“
inak
zahodil „Číslo2 je väčšie ako číslo1“
byť
nastaviť+ x

Teraz spustite skript pomocou bash b_script.sh .

Výstupom je iba ladenie podmienok if, ako je uvedené.

6. Ako odladiť bash skript pomocou príkazu trap:

Ak je váš skript komplikovaný, existujú aj podrobnejšie techniky na ladenie. Jedným z nich je pasca príkaz. The pasca príkaz zachytí signály a vykoná príkaz, keď nastane konkrétna situácia. Príkaz môže byť signál alebo funkcia. Vytvoril som ďalší skript s názvom sum_script.sh :

#! /bin/bash
pasca 'echo' Riadok $ {LINENO}: prvé číslo je $ number1, druhé číslo je $ number2 a súčet je $ sum ''DEBUG
zahodil „Zadajte prvé číslo“
čítaťčíslo 1
zahodil „Zadajte druhé číslo“
čítaťčíslo2
súčet= $[číslo1 + číslo2]
zahodil 'suma je$ súčet'

The pasca príkaz s DEBUG signál zobrazuje stav premenných číslo 1 , číslo2 a súčet po vykonaní každého riadku, ako je znázornené na nasledujúcom výstupnom obrázku:

Žlté bloky sú prázdne medzery, pretože používateľ zatiaľ nezadal žiadny vstup; tieto medzery sa vyplnia, keď používateľ zadá hodnoty. Táto metóda je tiež veľmi nápomocná pri ladení skriptov bash.

7. Ako ladiť skript bash odstránením globalizácie súborov pomocou voľby -f:

Globalizácia súborov je proces hľadania súborov so zástupnými znakmi, tj. * a ? . V mnohých situáciách nie je potrebné pri ladení súbory rozširovať. V takýchto prípadoch môžete zablokovanie súboru zablokovať pomocou -f možnosť. Poďme to pochopiť pomocou skriptu fglobe_script.sh :

#! /bin/bash
zahodil 'Zobraziť všetky textové súbory.'
ls *.TXT

Vyššie uvedený kód zobrazí všetky textové súbory v aktuálnom adresári, spustite:

$bashfglobe_script.sh

Globalizáciu súborov vypnete pomocou -f možnosť:

$bash -ffglobe_script.sh

Podobne ho môžete použiť s shebangom a s nastaviť tiež príkaz:

#! /bin/bash
zahodil 'Zobraziť všetky textové súbory.'
ls *.TXT
nastaviť -f
zahodil „Zobraziť všetky textové súbory“
ls *.TXT
nastaviť+f

Teraz utekajte bash fglobe_script.sh:

Časť uzavretá s set -f/set +f možnosti nespracovali príkazy so zástupnými znakmi.

8. Ako skombinovať možnosti ladenia na ladenie skriptu shell:

Vo vyššie uvedených technikách ladenia používame iba jednu možnosť, ale pre lepšie porozumenie môžeme kombinovať rôzne možnosti. Implementujme -X a -v možnosti pre sum_script.sh skript. Ja používam sum_script.sh skript.

#! /bin/bash
zahodil „Zadajte prvé číslo“
čítaťčíslo 1
zahodil „Zadajte druhé číslo“
čítaťčíslo2
súčet= $[číslo1 + číslo2]
zahodil 'suma je$ súčet'

Teraz spustite:

$bash -xvsum_script.sh

Obaja -X a -v výstupy sú kombinované, ako je zobrazené na výstupnom obrázku. Podobne môžeme tiež kombinovať -u možnosť s verbose -v na detekciu chýb. Vymieňam číslo 1 premenná s na jeden v šiestom riadku scenára:

#! /bin/bash
je$ number2asúčetje$ súčet'' DEBUG
zahodil '
Zadajte prvé číslo'
prečítajte si číslo 1
zahodil '
Zadajte druhé číslo'
prečítajte si číslo 2
suma = $ [num + number2]
zahodil '
thesúčetje$ súčet'

Ak chcete zobraziť výstup, spustite nižšie uvedený príkaz:

$bash -uvsum_script.sh

9. Ako presmerovať správu o ladení do súboru:

Uloženie správy o ladení skriptu bash do súboru môže byť užitočné v mnohých situáciách. Je to trochu zložité, pretože presmerovať správu o ladení do súboru; používame niekoľko špeciálnych premenných. Implementujme to ďalej b_script.sh kód:

#! /bin/bash
exekútor 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
zahodil „Zadajte číslo 1“
čítaťčíslo 1
zahodil „Zadajte číslo 2“
čítaťčíslo2
keby [ '$ číslo' -gt '$ number2' ]
potom
zahodil „Číslo1 je väčšie ako číslo2“
elif [ '$ number1' -ekv '$ number2' ]
potom
zahodil „Číslo1 sa rovná číslu2“
inak
zahodil „Číslo2 je väčšie ako číslo1“
byť

Na druhom riadku kódu je vidieť, že presmerujeme výstup na a debug_report.log súbor pomocou súboru exekútor príkaz s deskriptorom súboru 5 (FD5).

exec 5> debug_report.log: The exekútor príkaz presmeruje všetko, čo sa deje v prostredí, do súboru debug_report.log.

BASH_XTRACEFD = 5: Je to a konkrétna bash premenná a nemôže byť použitý v inom shell. Je potrebné mu priradiť platný deskriptor súboru a bash do neho napíše extrahovaný výstup debug_report.log.

PS4 = ‘$ LINENO– ‘: Je to tiež premenná bash, ktorá sa používa na vytlačenie čísla riadka pri ladení v režime xtrace. Predvolená hodnota PS4 je + podpísať

Vyššie uvedený skript generuje súbor denníka s názvom debug_report.log, na prečítanie použite kat príkaz:

Záver:

Kód plný chýb môže ovplyvniť výkon programu a poškodiť tiež hardvér. Ladenie je veľmi dôležité pre každý program, pretože zvyšuje jeho účinnosť. Hľadanie existujúcich a potenciálnych chýb počas vývoja programu môže zabrániť neočakávanému správaniu vášho programu. Veľké kódy zvyčajne vyžadujú aktívne ladenie, čím sa zvyšuje účinnosť kódu tým, že sa eliminujú náročné zdroje kódu.

Mnoho programovacích jazykov a prostredí má svoje vlastné sprievodné debuggery. V skripte bash je možné implementovať rôzne techniky na ladenie skriptu. Táto príručka sa dôkladne zamerala na všetky metódy, ktoré je možné použiť na nájdenie chýb v skriptoch bash. Takže kedykoľvek máte pocit, že sa váš bash skript nechová podľa očakávania, použite ktorúkoľvek z vyššie uvedených techník, ale režim xtrace (-x) je vo väčšine prípadov veľmi užitočný.