Kako odpraviti napake v bash skriptu?

How Debug Bash Script




Vsak program mora biti brez napak, preden pride do potrošnikov. Razvijalci programske opreme se po svojih najboljših močeh trudijo, da bi bili programi brez napak. Vendar je težko narediti kodo brezhibno, če je na tisoče vrstic. Odpravljanje napak je stalen proces; pomaga pri takojšnjem odkrivanju napak, zbiranju dragocenih informacij o kodi in odpravljanju odvečnih kodov kode.

Vsi programski jeziki imajo nekaj skupnih in le nekaj različnih pristopov za iskanje hroščev. Na primer, za hitro odpravljanje napak lahko uporabite programe za odpravljanje napak. Ker skriptno lupino nima posebnega orodja za odpravljanje napak v kodi. Ta članek govori o razpravljanju o različnih tehnikah odpravljanja napak, s katerimi lahko naredite bash skript brez napak. Preden se poglobimo v metode, se seznanimo z lupinami in skriptami lupin:







Kaj je lupina v Linuxu?

Ko zaženete računalnik, jedro dobi informacije o priključeni strojni opremi in omogoča interakcijo z drugimi priključenimi komponentami. Poleg tega upravlja pomnilnik, CPE in prepozna vse nove zunanje naprave. Na splošno je jedro hrbtenica vsakega operacijskega sistema. Ali ste kdaj pomislili, da bi neposredno sodelovali z jedrom, mu ukazali za izvajanje določene naloge? Ali je to sploh izvedljivo? Vsekakor! S pomočjo lupine, računalniškega programa z interaktivnim vmesnikom, lahko vsak upravlja jedro. Lupina omogoča ljudem interakcijo z jedrom in mu naroči, naj opravi katero koli nalogo.



V Unixu obstajata dve glavni lupini Bournova lupina in C lupina . Obe vrsti imata svoje podkategorije. Različne vrste školjk Bourne so Kornova lupina (ksh), lupina Almquist (pepel), lupina Bourne spet (bash), in Z lupina (zsh) . Hkrati ima lupina C svoje podkategorije C lupina (csh) in Lupina TENEX C. (tcsh) . Kot je navedeno zgoraj, od vseh lupin, Bash (lupina Bourne spet) je najbolj razširjena lupina, ki je zaradi svoje učinkovitosti in prijaznosti do uporabnikov na voljo v številnih distribucijah Linuxa.



Bash je privzeta lupina številnih distribucij Linuxa in jo množično uporabljajo milijoni uporabnikov Linuxa. Je tako raznolik in vpliven, da lahko opravi vsako nalogo, ki jo običajno opravljate v aplikacijah, ki temeljijo na grafičnem vmesniku. Urejate lahko datoteke, upravljate datoteke, si ogledate fotografije, poslušate glasbo, predvajate videoposnetke in še veliko več.





Kaj je skript lupine:

Ko smo se naučili osnovne ideje o lupini, pojdimo zdaj k skriptiranju lupine. Skript lupine je računalniški program, ki izvaja več ukazov v lupini, ki deluje kot tolmač za opravljanje določene funkcije. Kot smo že omenili, obstajata dve posebni vrsti lupin. Vendar se ta vodnik osredotoča na lupino Bourne Again (Bash).
Kaj je torej bash skript? V Linuxu so vsi ukazi bash shranjeni v /usr /bin in /bin mape. Na primer, ko zaženete ukaz, bash poišče, ali obstaja v imeniku ali ne. Ukaz se izvrši, če ga najde v imenikih, sicer daje napako.

Kaj pa izvajanje naloge, ki za izvedbo v terminalu potrebuje več ukazov? V tej posebni situaciji vam lahko pomaga bash skript. Bash skript je oblika lupinskega skriptiranja, ki vam omogoča, da v programih izvajate več ukazov bash za izvajanje določene naloge.



Kaj so napake pri bash skriptiranju:

Pri delu s skriptom bash ali s katerim koli drugim programskim jezikom naletite na številne napake. Napaka je napaka ali napaka v programu, ki lahko povzroči nepravilno obnašanje programa.

Vsak programski jezik ima svoj postopek za iskanje hroščev; Podobno ima bash tudi številne vgrajene možnosti za odpravljanje napak v terminalskem programu.

Upravljanje napak in odpravljanje napak v programu ni nič manj kot muka. To je dolgotrajno delo in se lahko poslabša, če ne poznate ustreznih orodij za odpravljanje napak v vašem programu. Ta zapis je popoln vodnik o odpravljanju napak bash skriptov, da bo vaš skript brez napak. Pa začnimo:

Kako odpraviti napake v bash skriptu:

Ko delate na velikih programskih projektih, naletite na številne napake ali hrošče. Odpravljanje napak v programu je včasih lahko zapleteno. Programerji običajno uporabljajo orodja za odpravljanje napak, številni urejevalniki kod pa pomagajo tudi pri iskanju napak s poudarjanjem skladnje.

V Linuxu obstajajo različna orodja za odpravljanje napak, na primer GNU Debugger ali gdb. Orodja, kot je GDB, so v pomoč pri programskih jezikih, ki se prevedejo v binarne datoteke. Ker je bash preprost tolmačeni jezik, za odpravljanje napak niso potrebna težka orodja.

Za odpravljanje napak skriptne kode bash obstajajo različne tradicionalne tehnike, ena od njih pa je dodajanje Trditve. Trditve so pogoji, ki se dodajo v programe za preverjanje posebnih pogojev in ustrezno izvedbo programa. To je obrambna tehnika, ki pomaga pri iskanju hroščev in testiranju. Najdete jih lahko veliko orodja ki pomagajo pri dodajanju trditev v bash skripte.

No, dodajanje trditev je ena od starih tradicionalnih tehnik. Za odpravljanje napak bash skripta je v bashu na voljo nabor zastavic/možnosti. Te možnosti je mogoče dodati skupaj s shebang v skripte ali dodati med izvajanjem programa v terminalu. Spodaj so navedene teme, ki jih bomo obravnavali:

  1. Odpravljanje napak bash skripta z omogočanjem podrobno -v možnost
  2. Kako odpraviti napake v bash skriptu z uporabo xtrace -x možnost
  3. Kako odpraviti napake v bash skriptu z uporabo noexec -n možnost
  4. Kako prepoznati nenastavljene spremenljivke pri odpravljanju napak bash skripta
  5. Kako odpraviti napake v poseben del bash skripte
  6. Kako odpraviti napake v bash skriptu z past ukaz
  7. Kako odpraviti napake bash skripta z odpravo globiranje datotek uporabljati -f možnost
  8. Kako kombinirati možnosti odpravljanja napak za odpravljanje napak lupinskega skripta
  9. Kako preusmeritev poročila o odpravljanju napak v datoteko

Preverimo torej različne tehnike v bashu za odpravljanje napak bash skripta:

1. Kako odpraviti napake bash skripta z omogočanjem možnosti verbose -v:

Eden najlažjih pristopov za odpravljanje napak bash skripta je uporaba -v možnost, znana tudi kot podrobna. Možnost je mogoče dodati s shebang ali izrecno vnesti z imenom datoteke skripta med izvajanjem. Natančna možnost bo izvedla in natisnila vsako vrstico kode kot proces s strani tolmača. Razumejmo to s primerom bash skripta:

#! /bin/bash
vrgel ven 'Vnesite številko 1'
prebratištevilka 1
vrgel ven 'Vnesite številko 2'
prebratištevilka 2
če [ '$ številka 1' -gt '$ številka 2' ]
potem
vrgel ven 'Število1 je večje od Število2'
elif [ '$ številka 1' -ekv '$ številka 2' ]
potem
vrgel ven 'Število 1 je enako številki 2'
drugače
vrgel ven 'Število2 je večje od Število1'
biti

Zgornja koda od uporabnika pridobi dve številki in nato izvede nekaj pogojnih stavkov, da preveri, ali je število pomembnejše, manjše ali enako drugemu vnesenemu številu. Čeprav lahko kateri koli urejevalnik besedil uporabite za bash skript, uporabljam urejevalnik Vim. Vim je zmogljiv urejevalnik, bogat s funkcijami, ki poudarja skladnjo bash skriptov in zmanjšuje možnosti sintaksnih napak. Če nimate urejevalnika Vim, ga zaženite tako, da zaženete spodnji ukaz:

$sudoaptnamestite Sem prišel

Ustvarite datoteko skripta bash z:

$Sem prišelb_script.sh

Če ste novi v urejevalniku Vim, vam priporočam, da se naučite kako uporabljati urejevalnik vim preden nadaljujete.

Zdaj se vrnite k skriptu in izvedite skript z uporabo -v možnost:

$bash -vb_script.sh

V zgornjem izhodu je razvidno, da je vsaka vrstica skripta natisnjena v terminalu, ko jih tolmač obdeluje. Upoštevajte, da skript ne bo več prejemal vnosa od uporabnika in nato obdelal naslednjo vrstico skripta. Kot je bilo že omenjeno, je -v možnost lahko postavite po shebang, kot je prikazano na naslednjem:

#! / bin / bash -v

Podobno lahko podrobno zastavico dodate tudi v naslednjo vrstico shebang z uporabo nastavljeno ukaz:

#! /bin/bash
nastavljeno -v

Vsaka od zgoraj obravnavanih metod lahko omogoči podroben opis.

2 Kako odpraviti napake bash skripta z možnostjo xtrace -x:

Izvedba sledenja, znana tudi kot xtrace, je pametna in uporabna možnost za odpravljanje napak, zlasti za sledenje logičnim napakam. Logične napake so običajno povezane s spremenljivkami in ukazi. Za preverjanje stanja spremenljivke med izvajanjem skripta uporabimo datoteko -x možnost. Zdaj znova zaženite b_script.sh datoteko z -x zastava:

$bash -xb_script.sh

Rezultat izrecno prikazuje vrednost vsake spremenljivke med izvajanjem. Še enkrat, -x lahko uporabite poleg shebang in po shebang vrstici z ukazom set. Xtrace postavi znak + v vsako vrstico skripta.

3 Kako odpraviti napake bash skripta z možnostjo noexec -n:

Napake v sintaksi so eden glavnih vzrokov hroščev. Za sintaktično odpravljanje napak bash uporabljamo noexec način (brez izvajanja). Možnost, ki se uporablja za način noexec, je -n. Prikazal bo samo sintaktične napake kode, namesto da bi jo izvedel. Veliko varnejši pristop k odpravljanju napak v kodi. Izvedimo b_script.sh spet z -n možnost:

$bash -nb_script.sh

Koda ne bo izvedena, če ni sintaktične napake. Zdaj pa spremenimo našo kodo:

#! /bin/bash

vrgel ven 'Vnesite številko 1'
prebratištevilka 1
vrgel ven 'Vnesite številko 2'
prebratištevilka 2
če [ '$ številka 1' -gt '$ številka 2' ]
potem
vrgel ven 'Število1 je večje od Število2'
elif [ '$ številka 1' -ekv '$ številka 2' ]
#potem
vrgel ven 'Število 1 je enako številki 2'
drugače
vrgel ven 'Število2 je večje od Število1'
biti

Komentiram potem po elif . Zdaj z -n execute b_script.sh skript:

$bash -nb_script.sh

Kot je bilo pričakovano, je jasno identificiral napako in jo prikazal v terminalu.

4 Kako prepoznati neponastavljene spremenljivke pri odpravljanju napak bash skripta:

Napisovanje med pisanjem kode je običajno. Pogosto napačno vnesete spremenljivko, ki ne dovoljuje izvajanja kode. Za identifikacijo takšne napake uporabljamo -u možnost. Ponovno spremenimo kodo:

#! /bin/bash
vrgel ven 'Vnesite številko 1'
prebratištevilka 1
vrgel ven 'Vnesite številko 2'
prebratištevilka 2
če [ '$ num1' -gt '$ številka 2' ]
potem
vrgel ven 'Število1 je večje od Število2'
elif [ '$ številka 1' -ekv '$ številka 2' ]
potem
vrgel ven 'Število 1 je enako številki 2'
drugače
vrgel ven 'Število2 je večje od Število1'
biti

V prvem če pogojno izjavo, sem preimenoval v številka 1 spremenljivo na številka 1 . Zdaj številka 1 je nenastavljena spremenljivka. Zdaj zaženite skript:

$bash -ub_script.sh

Izhod je identificiral in izrecno prikaže ime neponastavljene spremenljivke.

5. Kako odpraviti napake v določenem delu skripta bash:

Način xtrace obdeluje vsako vrstico kode in daje izhod. Iskanje napak v veliki kodi pa bi trajalo veliko časa, če že vemo, kateri del potencialno povzroča napako. Na srečo vam xtrace omogoča tudi odpravljanje napak v določenem delu kode, kar lahko dosežete z uporabo nastavljeno ukaz. Kraj set -x na začetku dela, ki ga je treba odpraviti, in nato set +x na koncu. Na primer, želim odpraviti napake pogojnih stavkov b_script.sh , zato bom vse pogojne izjave priložil v set -x in set +x možnosti, kot je prikazano v spodnji kodi:

#! /bin/bash
vrgel ven 'Vnesite številko 1'
prebratištevilka 1
vrgel ven 'Vnesite številko 2'
prebratištevilka 2
nastavljeno -x
če [ '$ number' -gt '$ številka 2' ]
potem
vrgel ven 'Število1 je večje od Število2'
elif [ '$ številka 1' -ekv '$ številka 2' ]
potem
vrgel ven 'Število 1 je enako številki 2'
drugače
vrgel ven 'Število2 je večje od Število1'
biti
nastavljeno+ x

Zdaj zaženite skript z uporabo bash b_script.sh .

Izhod odpravlja napake le, če so podani pogoji.

6. Kako odpraviti napake bash skripta z ukazom trap:

Če je vaš skript zapleten, obstaja več podrobnejših tehnik za odpravljanje napak. Eden od njih je past ukaz. The past command ujame signale in izvede ukaz, ko pride do določene situacije. Ukaz je lahko signal ali funkcija. Ustvaril sem še en skript z imenom sum_script.sh :

#! /bin/bash
past 'echo' Vrstica $ {LINENO}: Prva številka je $ number1, druga številka je $ number2 in vsota je $ sum ''ODLAG
vrgel ven 'Vnesite prvo številko'
prebratištevilka 1
vrgel ven 'Vnesite drugo številko'
prebratištevilka 2
vsota= $[število1 + število2]
vrgel ven 'vsota je$ vsota'

The past ukaz z ODLAG signal prikazuje stanje spremenljivk številka 1 , številka 2 in vsota po izvedbi vsake vrstice, kot je prikazano na naslednji izhodni sliki:

Rumeni bloki so prazni prostori, ker uporabnik še ni vnesel nobenega vnosa; ti prostori se bodo zapolnili, ko uporabnik vnese vrednosti. Ta metoda je prav tako v veliko pomoč pri odpravljanju napak skriptov bash.

7. Kako odpraviti napake v bash skriptu, tako da odpravite globljenje datotek z možnostjo -f:

Globovanje datotek je postopek iskanja datotek z nadomestnimi znaki, tj. * in ? . V mnogih primerih vam med odpravljanjem napak ni treba razširiti datotek. V takih primerih lahko blokirate globljenje datotek z uporabo -f možnost. Razumejmo to s scenarijem fglobe_script.sh :

#! /bin/bash
vrgel ven 'Prikaz vseh besedilnih datotek.'
ls *.txt

Zgornja koda bo prikazala vse besedilne datoteke v trenutnem imeniku, izvedite:

$bashfglobe_script.sh

Če želite izklopiti združevanje datotek, uporabite -f možnost:

$bash -ffglobe_script.sh

Podobno ga lahko uporabljate s shebang in z nastavljeno tudi ukaz:

#! /bin/bash
vrgel ven 'Prikaz vseh besedilnih datotek.'
ls *.txt
nastavljeno -f
vrgel ven 'Prikaži vse besedilne datoteke'
ls *.txt
nastavljeno+f

Zdaj pa teči bash fglobe_script.sh:

Del, zaprt z set -f/set +f možnosti niso obdelale ukazov z nadomestnimi znaki.

8. Kako kombinirati možnosti odpravljanja napak s skriptom za odpravljanje napak lupine:

V zgoraj omenjenih tehnikah odpravljanja napak uporabljamo samo eno možnost, lahko pa za boljše razumevanje kombiniramo različne možnosti. Izvedimo -x in -v možnosti za sum_script.sh skript. Jaz uporabljam sum_script.sh skript.

#! /bin/bash
vrgel ven 'Vnesite prvo številko'
prebratištevilka 1
vrgel ven 'Vnesite drugo številko'
prebratištevilka 2
vsota= $[število1 + število2]
vrgel ven 'vsota je$ vsota'

Zdaj izvedite:

$bash -xvsum_script.sh

Oboje -x in -v izhodi so združeni, kot je prikazano na izhodni sliki. Podobno lahko tudi kombiniramo -u možnost z natančnim opisom -v za odkrivanje napak. Zamenjam številka 1 spremenljivo z na enem v šesti vrstici scenarija:

#! /bin/bash
je$ številka 2invsotaje$ vsota'' ODLAG
vrgel ven '
Vnesite prvo številko'
preberite številko 1
vrgel ven '
Vnesite drugo številko'
preberite številko 2
vsota = $ [num + število2]
vrgel ven '
thevsotaje$ vsota'

Če si želite ogledati izhod, zaženite spodnji ukaz:

$bash -uvsum_script.sh

9. Kako preusmeriti poročilo o odpravljanju napak v datoteko:

Shranjevanje poročila o odpravljanju napak bash skripta v datoteko je lahko priročno v mnogih situacijah. To je nekoliko zapleteno, ker preusmeritev poročila o odpravljanju napak v datoteko; uporabljamo nekaj posebnih spremenljivk. Izvedimo ga naprej b_script.sh Koda:

#! /bin/bash
exec 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
vrgel ven 'Vnesite številko 1'
prebratištevilka 1
vrgel ven 'Vnesite številko 2'
prebratištevilka 2
če [ '$ number' -gt '$ številka 2' ]
potem
vrgel ven 'Število1 je večje od Število2'
elif [ '$ številka 1' -ekv '$ številka 2' ]
potem
vrgel ven 'Število 1 je enako številki 2'
drugače
vrgel ven 'Število2 je večje od Število1'
biti

V drugi vrstici kode je razvidno, da preusmerimo izhod na a debug_report.log datoteko z uporabo exec ukaz z deskriptorjem datotek 5 (FD5).

exec 5> debug_report.log: The exec ukaz preusmeri vse, kar se dogaja v lupini, v datoteko debug_report.log.

BASH_XTRACEFD = 5: Je posebna spremenljivka bash in ga ni mogoče uporabiti v nobeni drugi lupini. Treba mu je dodeliti veljaven deskriptor datoteke, bash pa bo izvlečeni izpis zapisal v debug_report.log.

PS4 = '$ LINENO– ‘: Je tudi spremenljivka bash, ki se uporablja za tiskanje številke vrstice med odpravljanjem napak v načinu xtrace. Privzeta vrednost PS4 je + podpisati

Zgornji skript ustvarja datoteko dnevnika, imenovano debug_report.log, če ga želite prebrati, uporabite mačka ukaz:

Zaključek:

Koda, polna hroščev, lahko vpliva na delovanje programa in škoduje strojni opremi. Odpravljanje napak je zelo pomembno za vsak program, saj naredi program učinkovitejši. Odkrivanje obstoječih in možnih napak med razvojem programa lahko prepreči nepričakovano obnašanje vašega programa. Velike kode običajno potrebujejo aktivno odpravljanje napak, s čimer se poveča učinkovitost kode z odpravljanjem možnosti uporabe kosov kode.

Številni programski jeziki in okolja imajo svoje spremljevalne iskalnike napak. Pri skriptiranju bash se lahko za odpravljanje napak v skriptu uporabijo različne tehnike. Ta priročnik se je temeljito osredotočil na vse metode, ki jih je mogoče uporabiti za iskanje hroščev v skriptih bash. Torej, kadar menite, da se vaš bash skript ne obnaša po pričakovanjih, uporabite katero koli od zgoraj navedenih tehnik, vendar je način xtrace (-x) v večini primerov zelo koristen.