Kaip derinti „bash“ scenarijų?

How Debug Bash Script




Prieš pasiekiant vartotojus, bet kurioje programoje neturi būti klaidų. Programinės įrangos kūrėjai stengiasi, kad programinės įrangos programose nebūtų klaidų. Tačiau sunku padaryti kodą nepriekaištingą, kai yra tūkstančiai eilučių. Derinimas yra nuolatinis procesas; tai padeda nedelsiant aptikti klaidas, surinkti vertingos informacijos apie kodą ir pašalinti nereikalingus kodo gabalus.

Visos programavimo kalbos turi keletą bendrų ir nedaug skirtingų būdų rasti klaidas. Pavyzdžiui, derinimo programos gali būti naudojamos greitai pašalinti klaidas. Tuo tarpu „shell“ scenarijai neturi jokio konkretaus kodo derinimo įrankio. Šiame rašte aptariami įvairūs derinimo būdai, kuriuos naudojant galima padaryti „bash“ scenarijų be klaidų. Prieš pasinerdami į metodus, turėkime pagrindinį supratimą apie apvalkalus ir apvalkalo scenarijus:







Kas yra „Linux“ apvalkalas?

Kai paleidžiate kompiuterį, branduolys gauna informaciją apie prijungtą aparatūrą ir leidžia kitiems prijungtiems komponentams sąveikauti. Be to, jis tvarko atmintį, procesorių ir atpažįsta bet kurį naują išorinį įrenginį. Apskritai branduolys yra bet kurios operacinės sistemos pagrindas. Bet ar kada pagalvojote tiesiogiai bendrauti su branduoliu, įsakyti jam atlikti konkrečią užduotį? Ar tai praktiškai įmanoma padaryti? Visiškai! Naudodami apvalkalą, kompiuterinę programą su interaktyvia sąsaja, kiekvienas gali valdyti branduolį. Korpusas leidžia žmonėms sąveikauti su branduoliu ir nurodo jam atlikti bet kokią užduotį.



„Unix“ yra du pagrindiniai apvalkalai Bourne apvalkalas ir C apvalkalas . Abi šios rūšys turi savo subkategorijas. Yra įvairių tipų Bourne kriauklių „Korn“ apvalkalas (ksh), „Almquist“ apvalkalas (pelenai), „Bourne“ vėl apvalkalas (bash), ir Z apvalkalas (zsh) . Tuo pačiu metu „C“ apvalkalas turi savo subkategorijas, tokias kaip C apvalkalas (csh) ir TENEX C apvalkalas (tcsh) . Kaip minėta aukščiau, iš visų apvalkalų Bash (Bourne vėl apvalkalas) yra plačiausiai naudojamas apvalkalas ir išleidžiamas iš dėžutės daugelyje Linux platinimų dėl savo efektyvumo ir patogumo vartotojui.



„Bash“ yra numatytasis daugelio „Linux“ platinimų apvalkalas ir yra plačiai naudojamas milijonų „Linux“ vartotojų. Jis yra toks įvairus ir įtakingas, kad gali atlikti kiekvieną užduotį, kurią paprastai atliekate GUI pagrįstose programose. Galite redaguoti failus, tvarkyti failus, peržiūrėti nuotraukas, klausytis muzikos, leisti vaizdo įrašus ir dar daugiau.





Kas yra „Shell“ scenarijus:

Kadangi sužinojome pagrindinę apvalkalo idėją, dabar pereikime prie apvalkalo scenarijaus. „Shell“ scenarijus yra kompiuterinė programa, vykdanti keletą komandų apvalkale, kuri atlieka vertėjo funkciją tam tikrai funkcijai atlikti. Kaip minėta aukščiau, yra 2 konkrečių rūšių kriauklės. Tačiau šiame vadove daugiausia dėmesio skiriama „Bourne Again“ apvalkalui (Bash).
Taigi, kas yra „bash“ scenarijus? „Linux“ sistemoje visos „bash“ komandos yra saugomos /usr /bin ir /bin aplankus. Pavyzdžiui, kai paleidžiate komandą, „bash“ ieško, ar ji yra kataloge, ar ne. Komanda vykdoma, jei ji randama kataloguose, kitaip pateikiama klaida.

O kaip atlikti užduotį, kuriai paleisti terminale reikia kelių komandų? Šioje konkrečioje situacijoje jums gali padėti „bash“ scenarijai. „Bash“ scenarijus yra apvalkalo scenarijaus forma, leidžianti priversti programas vykdyti kelias „bash“ komandas konkrečiai užduočiai atlikti.



Kas yra „bash“ scenarijaus klaidos:

Dirbdami su „bash“ scenarijais ar kitomis programavimo kalbomis susiduriate su daugybe klaidų. Klaida yra programos klaida arba gedimas, dėl kurio programa gali veikti netinkamai.

Kiekviena programavimo kalba turi savo klaidų paieškos procedūrą; panašiai, „bash“ taip pat turi daug integruotų parinkčių, skirtų derinti terminalo programą.

Klaidų valdymas ir programos derinimas yra ne mažiau kaip vargas. Tai daug laiko reikalaujantis darbas ir gali pablogėti, jei nežinote tinkamų programos derinimo įrankių. Šis rašymas yra išsamus vadovas, kaip derinti „bash“ scenarijus, kad scenarijus būtų be klaidų. Taigi pradėkime:

Kaip derinti „bash“ scenarijų:

Kai dirbate su dideliais programavimo projektais, susiduriate su daugybe klaidų ar klaidų. Programos derinimas kartais gali būti sudėtingas. Programuotojai dažniausiai naudoja derinimo įrankius, o daugelis kodų redaktorių taip pat padeda rasti klaidas, pabrėždami sintaksę.

„Linux“ yra įvairių kodų derinimo įrankių, pavyzdžiui, „GNU Debugger“, dar žinomas kaip gdb. Tokie įrankiai kaip GDB yra naudingi programuojant kalbas, kurios kaupiamos į dvejetainius failus. Kadangi „bash“ yra paprasta aiškinama kalba, nereikia sunkių įrankių ją derinti.

Yra įvairių tradicinių metodų, kaip derinti „bash“ scenarijaus kodą, ir vienas iš jų yra pridėjimas Tvirtinimai. Teiginiai yra sąlygos, kurios pridedamos prie programų, siekiant patikrinti konkrečias sąlygas ir atitinkamai vykdyti programą. Tai gynybinė technika, padedanti rasti klaidas ir atlikti bandymus. Galite rasti daug įrankiai kurie padeda pridėti teiginių bash scenarijuose.

Na, teiginių pridėjimas yra viena iš senų tradicinių metodų. „Bash“ yra vėliavų/parinkčių rinkinių, skirtų derinti „bash“ scenarijų. Šias parinktis galima pridėti kartu su „shebang“ scenarijuose arba pridėti vykdant programą terminale. Temos, kurias ketiname nagrinėti, yra išvardytos žemiau:

  1. Kaip derinti „bash“ scenarijų įjungus daugiažodis -v variantas
  2. Kaip derinti „bash“ scenarijų naudojant xtrace -x variantas
  3. Kaip derinti „bash“ scenarijų naudojant noexec -n variantas
  4. Kaip atpažinti nenustatyti kintamieji derindamas „bash“ scenarijų
  5. Kaip derinti konkreti dalis bash scenarijaus
  6. Kaip derinti „bash“ scenarijų naudojant spąstai komandą
  7. Kaip pašalinti „bash“ scenarijų pašalinant failų gaudymas naudojant -f variantas
  8. Kaip derinti derinimo parinktys, skirtos derinti apvalkalo scenarijų
  9. Kaip peradresuoti derinimo ataskaitą į failą

Taigi, norėdami derinti „bash“ scenarijų, patikrinkime įvairius „bash“ metodus:

1. Kaip derinti „bash“ scenarijų, įjungus „verbose -v“ parinktį:

Vienas iš paprasčiausių būdų, kaip derinti „bash“ scenarijų, yra -v variantas, dar žinomas kaip daugiažodis. Ši parinktis gali būti pridėta naudojant „shebang“ arba aiškiai įtraukta su scenarijaus failo pavadinimu vykdant. Daugiafunkcinė parinktis vykdys ir spausdins kiekvieną kodo eilutę kaip vertėjo procesą. Supraskime tai naudodami „bash“ scenarijaus pavyzdį:

#! /bin/bash
išmetė „Įveskite skaičių1“
skaitytinumeris 1
išmetė „Įveskite skaičių2“
skaitytiskaičius2
jei [ '$ numeris1' -gt '$ numeris2' ]
tada
išmetė „Skaičius1 yra didesnis už skaičių2“
elifas [ '$ numeris1' -ekv '$ numeris2' ]
tada
išmetė „Skaičius1 yra lygus skaičiui 2“
Kitas
išmetė „Skaičius2 yra didesnis už skaičių1“
būti

Aukščiau pateiktas kodas gauna du numerius iš vartotojo ir atlieka tam tikrus sąlyginius teiginius, kad patikrintų, ar skaičius yra reikšmingesnis, mažesnis ar lygus kitam įvestam skaičiui. Nors „bash“ scenarijui galima naudoti bet kurį teksto redaktorių, aš naudoju „Vim“ redaktorių. „Vim“ yra galingas, daug funkcijų turintis redaktorius, išryškinantis „bash“ scenarijų sintaksę ir sumažinantis sintaksės klaidų tikimybę. Jei neturite „Vim“ redaktoriaus, gaukite jį vykdydami toliau nurodytą komandą:

$sudotinkamasdiegti aš atėjau

Sukurkite „bash“ scenarijaus failą naudodami:

$aš atėjaub_script.sh

Jei esate naujokas „Vim“ redaktoriuje, rekomenduoju pasimokyti kaip naudotis vim redaktoriumi prieš tęsdami.

Dabar, grįždami prie scenarijaus, vykdykite scenarijų naudodami -v variantas:

$mušti -vb_script.sh

Aukščiau pateiktame išėjime matyti, kad kiekviena scenarijaus eilutė spausdinama terminale, kai jas apdoroja vertėjas. Atminkite, kad scenarijus nustos imti informaciją iš vartotojo ir apdoros kitą scenarijaus eilutę. Kaip aptarta aukščiau, kad -v Ši parinktis gali būti dedama po „shebang“, kaip parodyta toliau:

#! / bin / bash -v

Panašiai daugiažodę vėliavą taip pat galima pridėti kitoje shebang eilutėje, naudojant nustatyti komanda:

#! /bin/bash
nustatyti -v

Bet kuris iš aukščiau aptartų metodų gali įgalinti daugžodžiavimą.

2 Kaip derinti „bash“ scenarijų naudojant „xtrace -x“ parinktį:

Vykdymo sekimas, dar žinomas kaip „xtrace“, yra protinga ir naudinga derinimo parinktis, ypač norint atsekti logines klaidas. Loginės klaidos paprastai yra susijusios su kintamaisiais ir komandomis. Norėdami patikrinti kintamojo būseną vykdant scenarijų, naudojame -x variantas. Dabar vėl paleiskite b_script.sh failą su -x vėliava:

$mušti -xb_script.sh

Išvestyje aiškiai rodoma kiekvieno kintamojo vertė vykdymo proceso metu. Vėlgi, -x gali būti naudojamas šalia shebang ir po shebang eilutės naudojant komandą set. „Xtrace“ prideda + ženklą su kiekviena scenarijaus eilute.

3 Kaip derinti „bash“ scenarijų naudojant „noexec -n“ parinktį:

Sintaksės klaidos yra viena iš pagrindinių klaidų priežasčių. Norėdami sintaksiškai derinti „bash“ scenarijų, naudojame noexec (be vykdymo) režimas. „Noexec“ režimui naudojama parinktis yra -n. Jame bus rodomos tik kodo sintaksės klaidos, o ne vykdomas. Daug saugesnis būdas derinti kodą. Vykdykime b_script.sh vėl su -n variantas:

$mušti -nb_script.sh

Jei nebus sintaksės klaidos, kodas nebus vykdomas. Dabar pakeiskime savo kodą:

#! /bin/bash

išmetė „Įveskite skaičių1“
skaitytinumeris 1
išmetė „Įveskite skaičių2“
skaitytiskaičius2
jei [ '$ numeris1' -gt '$ numeris2' ]
tada
išmetė „Skaičius1 yra didesnis už skaičių2“
elifas [ '$ numeris1' -ekv '$ numeris2' ]
#tada
išmetė „Skaičius1 yra lygus skaičiui 2“
Kitas
išmetė „Skaičius2 yra didesnis už skaičių1“
būti

Aš komentuoju tada po elifas . Dabar su -n vykdyti b_script.sh scenarijus:

$mušti -nb_script.sh

Kaip ir tikėtasi, jis aiškiai nustatė klaidą ir rodė ją terminale.

4 Kaip nustatyti nenustatytus kintamuosius derinant „bash“ scenarijų:

Įprasta rašyti kodą rašant klaidą. Dažnai klaidingai įvedate kintamąjį, kuris neleidžia vykdyti kodo. Norėdami nustatyti tokią klaidą, naudojame -u variantas. Dar kartą pakeiskite kodą:

#! /bin/bash
išmetė „Įveskite skaičių1“
skaitytinumeris 1
išmetė „Įveskite skaičių2“
skaitytiskaičius2
jei [ '$ num1' -gt '$ numeris2' ]
tada
išmetė „Skaičius1 yra didesnis už skaičių2“
elifas [ '$ numeris1' -ekv '$ numeris2' ]
tada
išmetė „Skaičius1 yra lygus skaičiui 2“
Kitas
išmetė „Skaičius2 yra didesnis už skaičių1“
būti

Pirmajame jei sąlyginis teiginys, pervadinau numeris 1 kintamasis į num1 . Dabar num1 yra nenustatytas kintamasis. Dabar paleiskite scenarijų:

$mušti -ub_script.sh

Išvestis nustatė ir aiškiai parodo nenustatyto kintamojo pavadinimą.

5. Kaip derinti konkrečią „bash“ scenarijaus dalį:

„Xtrace“ režimas apdoroja kiekvieną kodo eilutę ir pateikia išvestį. Tačiau klaidų paieška dideliame kode užims daug laiko, jei jau žinome, kuri dalis gali sukelti klaidą. Laimei, „xtrace“ taip pat leidžia derinti tam tikrą kodo dalį, kurią galima atlikti naudojant nustatyti komandą. Vieta rinkinys -x dalies, kurią reikia derinti, pradžioje ir tada rinkinys +x pabaigoje. Pavyzdžiui, noriu derinti sąlyginius teiginius b_script.sh , todėl pridedu visus sąlyginius teiginius rinkinys -x ir rinkinys +x parinktys, kaip parodyta žemiau esančiame kode:

#! /bin/bash
išmetė „Įveskite skaičių1“
skaitytinumeris 1
išmetė „Įveskite skaičių2“
skaitytiskaičius2
nustatyti -x
jei [ '$ numeris' -gt '$ numeris2' ]
tada
išmetė „Skaičius1 yra didesnis už skaičių2“
elifas [ '$ numeris1' -ekv '$ numeris2' ]
tada
išmetė „Skaičius1 yra lygus skaičiui 2“
Kitas
išmetė „Skaičius2 yra didesnis už skaičių1“
būti
nustatyti+ x

Dabar paleiskite scenarijų naudodami bash b_script.sh .

Išvestis derina tik tada, kai nurodytos sąlygos.

6. Kaip derinti „bash“ scenarijų naudojant „trap“ komandą:

Jei jūsų scenarijus yra sudėtingas, yra ir sudėtingesnių derinimo metodų. Vienas iš jų yra spąstai komandą. The spąstai komanda sugauna signalus ir vykdo komandą, kai susidaro tam tikra situacija. Komanda gali būti signalas arba funkcija. Aš sukūriau kitą scenarijų pavadinimu sum_script.sh :

#! /bin/bash
spąstai „echo“ eilutė $ {LINENO}: pirmasis skaičius yra $ number1, antrasis skaičius yra $ number2, o suma yra $ suma ''DEBUG
išmetė „Įveskite pirmąjį numerį“
skaitytinumeris 1
išmetė „Įveskite antrą numerį“
skaitytiskaičius2
suma= $[skaičius1 + skaičius2]
išmetė 'suma yra$ suma'

The spąstai komanduoti su DEBUG signalas rodo kintamųjų būseną numeris 1 , skaičius2 ir suma įvykdžius kiekvieną eilutę, kaip parodyta šiame išvesties paveikslėlyje:

Geltoni blokai yra tuščios vietos, nes vartotojas dar neįvedė jokios įvesties; šios vietos užpildomos, kai vartotojas įveda reikšmes. Šis metodas taip pat yra labai naudingas derinant „bash“ scenarijus.

7. Kaip derinti „bash“ scenarijų, pašalinant failų gaudymą naudojant parinktį -f:

Failų perkėlimas yra failų su pakaitos simboliais paieškos procesas, t. * ir ? . Daugeliu atvejų derinant nereikia išplėsti failų. Tokiais atvejais galite blokuoti failo gaubimą naudodami -f variantas. Supraskime tai su scenarijumi fglobe_script.sh :

#! /bin/bash
išmetė „Rodyti visus teksto failus“.
ls *.txt

Aukščiau pateiktas kodas parodys visus teksto failus dabartiniame kataloge, vykdykite:

$muštifglobe_script.sh

Norėdami išjungti failų gaudymą, naudokite -f variantas:

$mušti -ffglobe_script.sh

Panašiai galite jį naudoti su „shebang“ ir „ nustatyti taip pat komandą:

#! /bin/bash
išmetė „Rodyti visus teksto failus“.
ls *.txt
nustatyti -f
išmetė „Rodyti visus teksto failus“
ls *.txt
nustatyti+f

Dabar bėk bash fglobe_script.sh:

Dalis pridedama rinkinys -f/set +f parinktys neapdorojo komandų su pakaitos simboliais.

8. Kaip derinimo derinimo parinktis derinti su apvalkalo scenarijumi:

Aukščiau paminėtuose derinimo metoduose naudojame tik vieną parinktį, tačiau galime geriau derinti įvairias galimybes. Įgyvendinkime -x ir -v parinktis į sum_script.sh scenarijus. Aš naudoju sum_script.sh scenarijus.

#! /bin/bash
išmetė „Įveskite pirmąjį numerį“
skaitytinumeris 1
išmetė „Įveskite antrą numerį“
skaitytiskaičius2
suma= $[skaičius1 + skaičius2]
išmetė 'suma yra$ suma'

Dabar vykdykite:

$mušti -xvsum_script.sh

Abu -x ir -v išėjimai yra sujungti, kaip parodyta išvesties paveikslėlyje. Panašiai galime derinti ir -u parinktis su išsamiu -v klaidoms aptikti. Aš pakeičiu numeris 1 kintamasis su ant vieno šeštoje scenarijaus eilutėje:

#! /bin/bash
yra$ numeris2irsumayra$ suma'' DEBUG
išmetė '
Įveskite pirmąjį skaičių'
skaityti numerį 1
išmetė '
Įveskite antrąjį skaičių'
skaityti numerį 2
suma = $ [num + skaičius2]
išmetė '
įsumayra$ suma'

Norėdami peržiūrėti išvestį, paleiskite žemiau nurodytą komandą:

$mušti -uvsum_script.sh

9. Kaip nukreipti derinimo ataskaitą į failą:

„Bash“ scenarijaus derinimo ataskaitos išsaugojimas faile gali būti naudingas daugeliu atvejų. Tai šiek tiek sudėtinga, nes nukreipti derinimo ataskaitą į failą; mes naudojame kai kuriuos specialius kintamuosius. Įgyvendinkime tai b_script.sh kodas:

#! /bin/bash
vykd 5>dubug_report.log
BASH_XTRACED=„5“
PS4=„$ LINENO-“
išmetė „Įveskite skaičių1“
skaitytinumeris 1
išmetė „Įveskite skaičių2“
skaitytiskaičius2
jei [ '$ numeris' -gt '$ numeris2' ]
tada
išmetė „Skaičius1 yra didesnis už skaičių2“
elifas [ '$ numeris1' -ekv '$ numeris2' ]
tada
išmetė „Skaičius1 yra lygus skaičiui 2“
Kitas
išmetė „Skaičius2 yra didesnis už skaičių1“
būti

Antroje kodo eilutėje matyti, kad nukreipiame išvestį į a debug_report.log failą naudojant vykd komanda su failo deskriptoriumi 5 (FD5).

exec 5> debug_report.log: The vykd komanda nukreipia viską, kas vyksta apvalkale, į failą debug_report.log.

BASH_XTRACEFD = 5: Tai yra konkretus bash kintamasis ir negali būti naudojamas jokiame kitame apvalkale. Jam reikia priskirti galiojantį failo aprašą, o „bash“ parašys išgautą išvestį debug_report.log.

PS4 = „$ LINENO“ „: Tai taip pat yra„ bash “kintamasis, naudojamas spausdinti eilutės numerį derinant naudojant„ xtrace “režimą. Numatytoji PS4 vertė yra + ženklas

Aukščiau pateiktas scenarijus generuoja žurnalo failą pavadinimu debug_report.log, Norėdami jį perskaityti, naudokite katė komanda:

Išvada:

Kodas, kuriame yra daug klaidų, gali paveikti programos našumą ir pakenkti aparatinei įrangai. Derinimas yra labai svarbus kiekvienai programai, nes tai daro programą efektyvesnę. Radus esamas ir galimas klaidas kuriant programą, jūsų programa gali netikėtai elgtis. Dideliems kodams paprastai reikia aktyvaus derinimo, kad būtų padidintas kodo efektyvumas pašalinant recesiją sunaudojančias kodo dalis.

Daugelis programavimo kalbų ir aplinkų turi savo papildomus derintuvus. Naudojant „bash“ scenarijų, gali būti įdiegti įvairūs scenarijaus derinimo būdai. Šis vadovas išsamiai sutelkė dėmesį į visus metodus, kuriuos galima naudoti norint rasti klaidų „bash“ scenarijuose. Taigi, kai manote, kad jūsų „bash“ scenarijus veikia ne taip, kaip tikėtasi, naudokite bet kurį iš aukščiau paminėtų metodų, tačiau daugeliu atvejų „xtrace“ režimas (-x) yra gana naudingas.