Slik feilsøker du bash-skript med to verktøy

Hvordan feilsøke bash-skript med to enkle verktøy Bash-skript har du i en funk? Finn ut hvordan du starter prosessen med feilsøking av disse skriptene, ved hjelp av verktøy som fungerer sømløst med koden din.

For mange Linux-administratorer er bash-skript et must å bruke. Disse nyttige skriptene er med på å gjøre Linux til et av de mest fleksible operativsystemene på planeten. Det er veldig lite du ikke kan gjøre med et velskrevet manus. Men hva skjer når du har konstruert det skriptet nøye, bare for å finne at det ikke kjører som planlagt? Noe er galt. Hvis skriptet er langvarig og komplisert, kan det være lurt å spore problemet (e).

Mer om Open Source

  • 8 av tiårets verste open source-innovasjoner
  • Åpen kilde i 2020: Fremtiden ser lys ut
  • Linus Torvalds: "Git beviste at jeg kunne være mer enn et en-rart."
  • 20 raske tips for å gjøre Linux-nettverk enklere (gratis PDF)

Heldigvis er det mange verktøy tilgjengelig som hjelper deg med å feilsøke bash-skriptene dine. Et slikt verktøy er satt x. Dette bestemte feilsøkingsverktøyet lar deg markere i et skript der du vil fokusere feilsøkingsarbeidet. Med sett x kan du enten feilsøke et helt skript, en del av et skript eller en enkelt linje. Et annet praktisk verktøy lar deg logge utdata av skript til en fil. Dette kommer godt med, spesielt når skriptet ditt er lengre enn vanlig (eller du vil debutere senere).

La oss se på hvordan disse to verktøyene brukes i et enkelt bash-skript.

Hva trenger du

Det eneste du trenger for dette er en Linux-distribusjon. De fleste hver distribusjon vil inneholde de nødvendige verktøyene, men distribusjonen må inneholde bash-versjon 5.0 eller bedre. Du kan finne ut hvilken versjon av bash distribusjonen din inkluderer med kommandoen bash --version. Fordi vi jobber med kommandolinjen, spiller det ingen rolle om du bruker et skrivebord eller en serverdistribusjon.

Manuset

Det grunnleggende skriptet vi bruker for denne testen er:

 #! / bin / bash var = "Hello World" # print it echo "$ var" # En annen måte å trykke det printf "% s \ n" "$ var" echo "Your home is: $ HOME" 

Det er et ganske greit manus. Lag en ny fil med kommandoen nano hello.world med innholdet ovenfor. Lagre og lukk filen. Gi den nye filen kjørbare tillatelser med kommandoen:

 chmod u + x hallo. verden 

Nå kjør manuset med kommandoen:

 sh ./hello.world 

Du skal se nøyaktig den utskriften du forventer ( figur A ).

Figur A: Bash-skriptutgangen vår.

Selvfølgelig er det ingenting galt med dette skriptet, men det gir et utmerket eksempel.

Det endrede skriptet

Nå skal vi endre skriptet for å inkludere feilsøkingsverktøyene våre. Den første er loggoppføringen. Legg til følgende under #! / Bin / bash:

 exec 5> debug_output.txt BASH_XTRACEFD = "5" PS4 = '$ LINENO:' 

Den første linjen navngir debugging-filen vår, debug_output.txt. Den andre linjen forteller bash hvor du skal skrive xtrace-informasjonen (som vil bli erklært med sett x). Til slutt vil den tredje linjen skrive ut linjenumre for å gjøre feilsøkingen vår enda enklere.

Deretter må vi bruke sett x for å indikere hvilken kode vi vil feilsøke. La oss si at ekko $ HOME-delen av skriptet fungerer som forventet, mens ekko $ var ikke er det. La oss omfatte den delen med sett x slik at vi bare kan feilsøke den delen av skriptet. Vi erklærer at begynnelsen av seksjonen skal feilsøkes med sett -x og slutten med sett + x. Så den nye delen av koden vil se slik ut:

 set -x var = "Hello World" # print it echo "$ var" # En annen måte å skrive ut det printf "% s \ n" "$ var" set + x 

Lagre og lukk den filen.

Kjør nå kommandoen sh./hello.world . Denne gangen er resultatet ganske annerledes ( figur B ).

Figur B: Feilsøkt produksjon.

Som du ser, begynner hver kommandolinje med et: -tegn, og utdataene som genereres av kodelinjene følger umiddelbart og inkluderer ikke tegnet:. Dette gjør det langt enklere å feilsøke det som foregår.

Hvis du ikke finner noen feil i koden du markerte med sett -x og angi + x, flytter du linjene til en annen seksjon og kjører kommandoen på nytt.

Feilsøking via loggfil

Hvis du arbeider med et bash-skript som er for lang for standardutdata, vil du se på den feilsøkingsloggfilen vi erklærte. Imidlertid vil du finne denne filen tom. Hvorfor? Fordi vi har kjørt skriptet ved hjelp av sh-skallet, og sh-skallet er ikke kompatibelt med BASH_XTRACEFD-kommandoen. I stedet for å kjøre skriptet med sh./hello.world, bare gi kommandoen ./hello.world . Dette vil bruke bash, i stedet for sh, og feilsøkingsutdataene våre kan deretter vises ( figur C ) med kommandoen:

 mindre debug_output.txt 

Figur C: Feilsøkingsutdataene våre er lest fra filen.

Fordi vi har skrevet manuset vårt på en slik måte, kan vi:

  • Kjør skriptet med sh ./hello.world for å se feilsøkingsinformasjonen vår som er sendt til standardutgang (som betyr at den skrives ut i terminalvinduet etter at du har kjørt kommandoen).
  • Kjør skriptet med ./hello.world for å få informasjon om feilsøking skrevet til debug_output.text-filen.

Du vil kanskje også merke at hvis du kjører skriptet med kommandoen ./hello_world, blir feilsøkingsinformasjonen ikke sendt til standardutdata, og vil se nøyaktig ut som i figur A.

Baby skritt

Og dette er en veldig enkel måte å begynne prosessen med feilsøking av basskriptene dine. For mange vil dette virke som babysteg, men når du først får tak i å bruke disse verktøyene, vil du finne dem som et uvurderlig middel til å feilsøke disse skriptene.

Ukens nyhetsbrev med åpen kildekode

Du vil ikke gå glipp av våre tips, opplæringsprogrammer og kommentarer til Linux OS og open source applikasjoner. Leveres tirsdager

Registrer deg i dag

© Copyright 2021 | pepebotifarra.com