Kako otkloniti pogreške u bash skripti?

How Debug Bash Script




Svaki program mora biti bez grešaka prije nego što dođe do potrošača. Razvojni programeri nastoje učiniti sve da programski programi budu bez grešaka. Ali teško je napraviti kôd besprijekoran kada postoje tisuće redaka. Otklanjanje pogrešaka je stalan proces; pomaže u trenutnom otkrivanju pogrešaka, prikupljanju vrijednih informacija o kodu i uklanjanju suvišnih dijelova koda.

Svi programski jezici imaju neke zajedničke i nekoliko različitih pristupa pronalaženju grešaka. Na primjer, programi za ispravljanje pogrešaka mogu se koristiti za brzo uklanjanje pogrešaka. Skriptiranje ljuske nema poseban alat za ispravljanje grešaka u kodu. Ovaj tekst govori o različitim tehnikama otklanjanja pogrešaka koje se mogu upotrijebiti za onemogućavanje bash skripte bez grešaka. Prije nego što zaronimo u metode, imajmo osnovno razumijevanje ljuski i skripti ljuske:







Što je ljuska u Linuxu?

Kad pokrenete računalo, kernel dobiva informacije o priključenom hardveru i dopušta interakciju drugim priključenim komponentama. Osim toga, upravlja memorijom, CPU -om i prepoznaje sve nove periferne uređaje. Sve u svemu, jezgra je okosnica svakog operacijskog sustava. No jeste li ikada razmišljali o izravnoj interakciji s jezgrom, naredbi da izvrši određeni zadatak? Je li uopće izvedivo to učiniti? Apsolutno! Uz pomoć ljuske, računalnog programa s interaktivnim sučeljem, svatko može upravljati jezgrom. Ljuska omogućuje ljudima interakciju s jezgrom i upućuje je da izvrši bilo koji zadatak.



U Unixu postoje dvije glavne ljuske Bournova ljuska i C ljuska . Obje ove vrste imaju svoje potkategorije. Različite su vrste Bournovih školjki Kornova školjka (ksh), Almquist školjka (pepeo), Bourneova opet školjka (bash), i Z ljuska (zsh) . U isto vrijeme, C ljuska ima svoje podkategorije poput C ljuska (csh) i TENEX C ljuska (tcsh) . Kao što je gore spomenuto, od svih ljuštura, Bash (Bourneova opet ljuska) je najčešće korištena ljuska i dolazi iz kutije u mnogim distribucijama Linuxa zbog svoje učinkovitosti i pristupačnosti.



Bash je zadana ljuska mnogih distribucija Linuxa i opsežno ga koriste milijuni korisnika Linuxa. Toliko je raznolik i utjecajan da može izvesti svaki zadatak koji obično obavljate u aplikacijama temeljenim na grafičkom sučelju. Možete uređivati ​​datoteke, upravljati datotekama, pregledavati fotografije, slušati glazbu, reproducirati videozapise i još mnogo toga.





Što je Shell skripta:

Kako smo naučili osnovnu ideju ljuske, prijeđimo sada na skriptiranje ljuske. Skripta ljuske je računalni program koji izvršava više naredbi u ljusci koja djeluje kao tumač za obavljanje određene funkcije. Kao što je gore spomenuto, postoje 2 posebne vrste školjki. Međutim, ovaj se vodič fokusira na ljusku Bourne Again (Bash).
Dakle, što je bash skripta? U Linuxu su sve bash naredbe pohranjene u /usr /bin i /bin mape. Na primjer, kad god pokrenete naredbu, bash pretražuje postoji li u direktoriju ili ne. Naredba se izvršava ako je pronađe u direktorijima, a zatim daje pogrešku.

Kako bi bilo izvršiti zadatak koji treba više naredbi za izvođenje u terminalu? U ovoj specifičnoj situaciji, bash skriptiranje vam može pomoći. Bash skriptiranje je oblik ljuska skriptiranja koji vam omogućuje da napravite programe za pokretanje više bash naredbi za izvršavanje određenog zadatka.



Što su greške u bash skripti:

Tijekom rada s bash skriptama ili s bilo kojim drugim programskim jezikom nailazite na mnoge pogreške. Greška je pogreška ili greška u programu koja može uzrokovati nepravilno ponašanje programa.

Svaki programski jezik ima svoju proceduru za pronalaženje grešaka; slično, bash također ima mnoge ugrađene mogućnosti za ispravljanje pogrešaka u terminalnom programu.

Upravljanje pogreškama i ispravljanje pogrešaka u programu nije ništa manje od muke. To je dugotrajan posao i može se pogoršati ako niste svjesni pravih alata za uklanjanje pogrešaka u vašem programu. Ovaj opis je potpuni vodič o otklanjanju pogrešaka bash skripti kako bi vaša skripta bila bez grešaka. Pa počnimo:

Kako otkloniti pogreške u bash skripti:

Kada radite na velikim projektnim projektima, nailazite na mnoge pogreške ili greške. Otklanjanje pogrešaka u programu ponekad može biti komplicirano. Programeri obično koriste alate za ispravljanje pogrešaka, a mnogi uređivači koda također pomažu u pronalaženju grešaka isticanjem sintakse.

U Linuxu postoje različiti alati za otklanjanje pogrešaka u kodovima, na primjer, GNU Debugger ili gdb. Alati poput GDB -a korisni su za programske jezike koji se kompajliraju u binarne datoteke. Budući da je bash jednostavan jezik za tumačenje, nema potrebe za teškim alatima za njegovo uklanjanje pogrešaka.

Postoje razne tradicionalne tehnike za otklanjanje pogrešaka bash skriptnog koda, a jedna od njih je dodavanje Tvrdnje. Tvrdnje su uvjeti koji se dodaju u programe za provjeru posebnih uvjeta i izvršavanje programa u skladu s tim. To je obrambena tehnika koja pomaže u pronalaženju grešaka i testiranju. Možete pronaći mnoge alata koji pomažu u dodavanju tvrdnji u bash skripte.

Pa, dodavanje tvrdnji jedna je od starih tradicionalnih tehnika. U bashu postoje skupovi zastavica/opcija za ispravljanje pogrešaka bash skripte. Ove se opcije mogu dodati zajedno sa shebang u skripte ili dodati tijekom izvršavanja programa u terminalu. Teme koje ćemo se pozabaviti navedene su u nastavku:

  1. Kako otkloniti pogreške u bash skripti omogućavanjem detaljno -v opcija
  2. Kako otkloniti pogreške u bash skripti pomoću xtrace -x opcija
  3. Kako otkloniti pogreške u bash skripti pomoću noexec -n opcija
  4. Kako prepoznati nepostavljene varijable tijekom ispravljanja pogrešaka bash skripte
  5. Kako otkloniti pogreške u određeni dio bash skripte
  6. Kako otkloniti pogreške u bash skripti pomoću zamka naredba
  7. Kako ukloniti pogreške u bash skripti globovanje datoteka koristiti -f opcija
  8. Kako da kombinirati mogućnosti ispravljanja pogrešaka za otklanjanje pogrešaka skripte ljuske
  9. Kako da redirect debug-report u datoteku

Pa provjerimo različite tehnike u bashu za ispravljanje pogrešaka bash skripte:

1. Kako otkloniti pogreške u bash skripti omogućavanjem verbose -v opcije:

Jedan od najlakših pristupa za ispravljanje pogrešaka bash skripte je korištenje -v opcija, poznata i kao detaljna. Opcija se može dodati pomoću shebanga ili izričito staviti s imenom datoteke skripte tijekom izvršavanja. Opširna opcija interpreter će izvršiti i ispisati svaki redak koda kao proces. Shvatimo to primjerom bash skripte:

#! /bin/bash
izbaciti 'Unesite broj 1'
čitatibroj 1
izbaciti 'Unesite broj 2'
čitatibroj 2
ako [ '$ broj 1' -gt '$ broj 2' ]
zatim
izbaciti 'Broj 1 veći je od broja 2'
elif [ '$ broj 1' -ekv '$ broj 2' ]
zatim
izbaciti 'Broj 1 jednak je broju 2'
drugo
izbaciti 'Broj 2 veći je od broja 1'
biti

Gornji kôd dobiva dva broja od korisnika, a zatim izvodi neke uvjetne naredbe kako bi provjerio je li broj značajniji, manji ili jednak drugom unesenom broju. Iako se bilo koji uređivač teksta može koristiti za bash skripte, ja koristim Vim editor. Vim je moćan uređivač bogat značajkama koji naglašava sintaksu bash skripti i smanjuje šanse za sintaksne pogreške. Ako nemate Vim editor, nabavite ga pokretanjem dolje navedene naredbe:

$sudoprikladaninstalirati došao sam

Izradite datoteku bash skripte koristeći:

$došao samb_script.sh

Ako ste tek počeli koristiti Vim editor, preporučujem vam da naučite kako koristiti vim editor prije nego nastavite.

Sada, natrag na skriptu, izvedite skriptu pomoću -v opcija:

$bash -vb_script.sh

Iz gornjeg izlaza može se vidjeti da se svaki redak skripte ispisuje u terminalu dok ih tumač obrađuje. Imajte na umu da skripta prestaje primati ulaz od korisnika, a zatim obrađuje sljedeći redak skripte. Kao što je gore spomenuto, -v opcija se može postaviti nakon shebanga kao što je prikazano na sljedećem:

#! / bin / bash -v

Slično, detaljna zastavica može se dodati u sljedeći redak shebang pomoću postavljen naredba:

#! /bin/bash
postavljen -v

Bilo koja od gore opisanih metoda može omogućiti opširnu opširnost.

2 Kako otkloniti pogreške u bash skripti pomoću opcije xtrace -x:

Trag izvršenja, također poznat kao xtrace, pametna je i korisna opcija za ispravljanje pogrešaka, posebno za praćenje logičkih pogrešaka. Logičke pogreške obično su povezane s varijablama i naredbama. Za provjeru stanja varijable tijekom izvršavanja skripte koristimo -x opcija. Sada opet pokrenite b_script.sh datoteku sa -x zastava:

$bash -xb_script.sh

Izlaz eksplicitno prikazuje vrijednost svake varijable tijekom procesa izvođenja. Opet, -x može se koristiti uz shebang i nakon shebang linije pomoću naredbe set. Xtrace stavlja znak + u svaki redak skripte.

3 Kako otkloniti pogreške u bash skripti pomoću opcije noexec -n:

Sintaksičke pogreške jedan su od primarnih uzroka grešaka. Za sintaksičko uklanjanje pogrešaka bash skripte koristimo noexec (bez izvršenja) način rada. Opcija koja se koristi za način rada noexec je -n. Prikazat će samo sintaksičke pogreške koda umjesto da ga izvrši. Mnogo sigurniji pristup otklanjanju pogrešaka koda. Izvršimo b_script.sh opet sa -n opcija:

$bash -nb_script.sh

Neće biti izvođenja koda ako nema sintaksne pogreške. Sada, izmijenimo naš kôd:

#! /bin/bash

izbaciti 'Unesite broj 1'
čitatibroj 1
izbaciti 'Unesite broj 2'
čitatibroj 2
ako [ '$ broj 1' -gt '$ broj 2' ]
zatim
izbaciti 'Broj 1 veći je od broja 2'
elif [ '$ broj 1' -ekv '$ broj 2' ]
#zatim
izbaciti 'Broj 1 jednak je broju 2'
drugo
izbaciti 'Broj 2 veći je od broja 1'
biti

Komentiram zatim nakon elif . Sada, sa -n execute b_script.sh skripta:

$bash -nb_script.sh

Kao što se i očekivalo, jasno je identificirao grešku i prikazao je na terminalu.

4 Kako prepoznati poništene varijable tijekom ispravljanja pogrešaka bash skripte:

Upisivanje pogreške pri pisanju koda uobičajeno je. Često pogrešno unesete varijablu koja ne dopušta izvršavanje koda. Za identifikaciju takve pogreške koristimo -u opcija. Ponovno izmijenimo kôd:

#! /bin/bash
izbaciti 'Unesite broj 1'
čitatibroj 1
izbaciti 'Unesite broj 2'
čitatibroj 2
ako [ 'broj $ 1' -gt '$ broj 2' ]
zatim
izbaciti 'Broj 1 veći je od broja 2'
elif [ '$ broj 1' -ekv '$ broj 2' ]
zatim
izbaciti 'Broj 1 jednak je broju 2'
drugo
izbaciti 'Broj 2 veći je od broja 1'
biti

U prvom ako uvjetni iskaz, preimenovao sam u broj 1 promjenjivo na broj1 . Sada broj1 je nestabilna varijabla. Sada pokrenite skriptu:

$bash -ub_script.sh

Izlaz je identificirao i izričito prikazuje naziv nestabilne varijable.

5. Kako otkloniti pogreške u određenom dijelu bash skripte:

Način xtrace obrađuje svaki redak koda i daje izlaz. Međutim, pronalaženje pogrešaka u velikom kodu oduzelo bi vrijeme ako već znamo koji dio potencijalno uzrokuje pogrešku. Srećom, xtrace vam također omogućuje ispravljanje pogrešaka u određenom dijelu koda, što se može postići pomoću postavljen naredba. Mjesto skup -x na početku dijela koji treba otkloniti pogreške, a zatim skup +x na kraju. Na primjer, želim otkloniti pogreške uvjetnih izraza od b_script.sh , pa ću sve uvjetne izjave priložiti u skup -x i skup +x opcije prikazane u donjem kodu:

#! /bin/bash
izbaciti 'Unesite broj 1'
čitatibroj 1
izbaciti 'Unesite broj 2'
čitatibroj 2
postavljen -x
ako [ '$ broj' -gt '$ broj 2' ]
zatim
izbaciti 'Broj 1 veći je od broja 2'
elif [ '$ broj 1' -ekv '$ broj 2' ]
zatim
izbaciti 'Broj 1 jednak je broju 2'
drugo
izbaciti 'Broj 2 veći je od broja 1'
biti
postavljen+ x

Sada pokrenite skriptu pomoću bash b_script.sh .

Izlaz otklanja pogreške samo ako su navedeni uvjeti.

6. Kako otkloniti pogreške u bash skripti pomoću naredbe trap:

Ako je vaša skripta komplicirana, postoje i razrađenije tehnike za otklanjanje pogrešaka. Jedan od njih je zamka naredba. The zamka naredba hvata signale i izvršava naredbu kada se dogodi određena situacija. Naredba može biti signal ili funkcija. Napravio sam još jednu skriptu pod imenom sum_script.sh :

#! /bin/bash
zamka 'echo' Red $ {LINENO}: Prvi broj je $ number1, drugi broj je $ number2 i zbroj je $ sum ''RAZREŠAVANJE
izbaciti 'Unesite prvi broj'
čitatibroj 1
izbaciti 'Unesite drugi broj'
čitatibroj 2
iznos= $[broj1 + broj2]
izbaciti 'zbroj je$ zbroj'

The zamka zapovijedati s RAZREŠAVANJE signal prikazuje status varijabli broj 1 , broj 2 i iznos nakon izvršavanja svakog retka kako je prikazano na sljedećoj izlaznoj slici:

Žuti blokovi su prazna mjesta jer korisnik još nije unio unos; ti će se prostori popunjavati kako korisnik unosi vrijednosti. Ova metoda je također vrlo korisna u otklanjanju pogrešaka bash skripti.

7. Kako otkloniti pogreške u bash skripti uklanjanjem globiranja datoteka pomoću opcije -f:

Globovanje datoteka je proces pronalaženja datoteka sa zamjenskim znakovima, tj. * i ? . U mnogim situacijama ne morate proširivati ​​datoteke tijekom ispravljanja pogrešaka. U takvim slučajevima datoteku možete blokirati pomoću datoteke -f opcija. Shvatimo to skriptom fglobe_script.sh :

#! /bin/bash
izbaciti 'Prikaz svih tekstualnih datoteka.'
ls *.txt

Gornji kod prikazat će sve tekstualne datoteke u trenutnom direktoriju, izvršite:

$bashfglobe_script.sh

Da biste isključili preslikavanje datoteka, upotrijebite -f opcija:

$bash -ffglobe_script.sh

Slično, možete ga koristiti s shebangom i s postavljen naredba također:

#! /bin/bash
izbaciti 'Prikaz svih tekstualnih datoteka.'
ls *.txt
postavljen -f
izbaciti 'Prikaz svih tekstualnih datoteka'
ls *.txt
postavljen+f

A sad trči bash fglobe_script.sh:

Dio zatvoren s skup -f/skup +f opcije nisu obradile naredbe sa zamjenskim znakovima.

8. Kako kombinirati opcije ispravljanja pogrešaka u skriptu za ispravljanje pogrešaka:

Koristimo samo jednu opciju u gore spomenutim tehnikama otklanjanja pogrešaka, ali možemo kombinirati različite opcije za bolje razumijevanje. Provedimo -x i -v opcije za sum_script.sh skripta. Ja koristim sum_script.sh skripta.

#! /bin/bash
izbaciti 'Unesite prvi broj'
čitatibroj 1
izbaciti 'Unesite drugi broj'
čitatibroj 2
iznos= $[broj1 + broj2]
izbaciti 'zbroj je$ zbroj'

Sada izvršite:

$bash -xvsum_script.sh

Oba -x i -v izlazi se kombiniraju, kako je prikazano na izlaznoj slici. Slično tome, možemo i kombinirati -u opcija s opširnim -v za otkrivanje pogrešaka. Zamjenjujem broj 1 promjenjiva sa na jedan u šestom retku pisma:

#! /bin/bash
je$ broj 2iiznosje$ zbroj'' RJEŠAVANJE
izbaciti '
Unesite prvi broj'
čitaj broj 1
izbaciti '
Unesite drugi broj'
čitaj broj 2
zbroj = $ [broj + broj2]
izbaciti '
theiznosje$ zbroj'

Da biste vidjeli izlaz, pokrenite dolje navedenu naredbu:

$bash -uvsum_script.sh

9. Kako preusmjeriti izvješće o otklanjanju pogrešaka u datoteku:

Spremanje izvješća o otklanjanju pogrešaka bash skripte u datoteku može biti korisno u mnogim situacijama. To je pomalo lukavo jer preusmjeravanje izvješća o otklanjanju pogrešaka u datoteku; koristimo neke posebne varijable. Provedimo ga dalje b_script.sh kodirati:

#! /bin/bash
exec 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
izbaciti 'Unesite broj 1'
čitatibroj 1
izbaciti 'Unesite broj 2'
čitatibroj 2
ako [ '$ broj' -gt '$ broj 2' ]
zatim
izbaciti 'Broj 1 veći je od broja 2'
elif [ '$ broj 1' -ekv '$ broj 2' ]
zatim
izbaciti 'Broj 1 jednak je broju 2'
drugo
izbaciti 'Broj 2 veći je od broja 1'
biti

U drugom retku koda može se vidjeti da izlaz preusmjeravamo na a debug_report.log datoteku pomoću exec naredba s opisom datoteke 5 (FD5).

exec 5> debug_report.log: The exec naredba preusmjerava sve što se događa u ljusci u datoteku debug_report.log.

BASH_XTRACEFD = 5: To je određena bash varijabla i ne može se koristiti u bilo kojoj drugoj ljusci. Treba mu dodijeliti valjani deskriptor datoteke, a bash će zapisati ekstrahirani izlaz u debug_report.log.

PS4 = '$ LINENO– ‘: Također je varijabla bash koja se koristi za ispis broja retka tijekom ispravljanja pogrešaka u načinu xtrace. Zadana vrijednost PS4 je + znak

Gornja skripta generira datoteku dnevnika pod nazivom debug_report.log, za čitanje upotrijebite mačka naredba:

Zaključak:

Kôd pun grešaka može utjecati na performanse programa i biti štetan za hardver. Otklanjanje pogrešaka vrlo je važno za svaki program jer ga čini učinkovitijim. Pronalaženje postojećih i potencijalnih pogrešaka tijekom razvoja programa može spriječiti neočekivano ponašanje vašeg programa. Velikim kodovima obično je potrebno aktivno otklanjanje pogrešaka, povećavajući učinkovitost koda eliminirajući regres koji troši komade koda.

Mnogi programski jezici i okruženja imaju vlastite popratne programe za otklanjanje pogrešaka. U bash skriptiranju mogu se primijeniti različite tehnike za uklanjanje pogrešaka u skripti. Ovaj vodič temeljito se usredotočio na sve metode koje se mogu koristiti za pronalaženje grešaka u bash skriptama. Dakle, kad god osjetite da se vaša bash skripta ne ponaša kako ste očekivali, upotrijebite bilo koju od gore navedenih tehnika, ali način xtrace (-x) u većini je slučajeva prilično koristan.