Hvordan feilsøke et bash -skript?

How Debug Bash Script




Ethvert program må være fritt for feil før det når forbrukerne. Programvareutviklere prøver sitt beste for å gjøre programvarene feilfrie. Men det er vanskelig å lage en kode feilfri når det er tusenvis av linjer. Debugging er en pågående prosess; det hjelper med å oppdage feil umiddelbart, samle verdifull informasjon om kode og eliminere overflødige kodebiter.

Alle programmeringsspråk har noen vanlige og få forskjellige tilnærminger for å finne feil. For eksempel kan feilsøkingsprogrammer brukes til å fjerne feil raskt. Mens skallskripting ikke har noe spesielt verktøy for å feilsøke koden. Denne oppskriften handler om å diskutere ulike feilsøkingsteknikker som kan brukes til å gjøre bash-skriptet feilfritt. Før vi dykker ned i metodene, la oss ha en grunnleggende forståelse av skjell og skallskripting:







Hva er skallet i Linux?

Når du starter datamaskinen, får kjernen informasjon om den tilkoblede maskinvaren og lar andre tilknyttede komponenter samhandle. Bortsett fra det, administrerer den minne, CPU og gjenkjenner alle nye eksterne enheter. Alt i alt er en kjerne ryggraden i ethvert operativsystem. Men har du noen gang tenkt på å samhandle direkte med kjernen, kommandere den for å utføre en bestemt oppgave? Er det i det hele tatt praktisk mulig å gjøre det? Absolutt! Ved hjelp av et skall, et dataprogram med et interaktivt grensesnitt, kan hvem som helst betjene kjernen. Skallet lar mennesker samhandle med kjernen og instruere den i å utføre enhver oppgave.



I Unix er det to hovedskjell Bourne skall og C -skall . Begge disse typene har sine underkategorier. Ulike typer Bourne -skall er Korn skall (ksh), Almquist skall (aske), Bourne igjen skall (bash), og Z -skall (zsh) . Samtidig har C -skallet sine egne underkategorier som C -skall (csh) og TENEX C -skall (tcsh) . Som nevnt ovenfor, ut av alle skjellene, Bash (Bourne again shell) er det mest brukte skallet og kommer ut av esken i mange Linux-distribusjoner på grunn av effektiviteten og brukervennligheten.



Bash er standardskallet for mange Linux -distribusjoner og brukes mye av millioner av Linux -brukere. Den er så mangfoldig og innflytelsesrik at den kan utføre hver oppgave du vanligvis utfører i GUI-baserte applikasjoner. Du kan redigere filer, administrere filer, se bilder, lytte til musikk, spille av videoer og mye mer.





Hva er et Shell Script:

Som vi har lært den grunnleggende ideen om skall, la oss nå gå mot skallskripting. Shell -skriptet er et dataprogram som utfører flere kommandoer i et skall som fungerer som tolk for å utføre en bestemt funksjon. Som omtalt ovenfor er det to spesielle typer skall. Denne guiden fokuserer imidlertid på Bourne Again -skallet (Bash).
Så hva er et bash -skript? I Linux lagres alle bash -kommandoene i /usr /bin og /bin mapper. For eksempel, når du kjører en kommando, søker bash om den finnes i katalogen eller ikke. Kommandoen blir utført hvis den finner i katalogene, ellers gir det en feil.

Hva med å utføre en oppgave som trenger flere kommandoer for å kjøre i terminalen? I denne spesifikke situasjonen kan bash scripting hjelpe deg. Bash -skripting er en form for skallskripting som lar deg lage programmer for å kjøre flere bash -kommandoer for å utføre en bestemt oppgave.



Hva er feil i bash scripting:

Når du jobber med bash scripting eller med andre programmeringsspråk, støter du på mange feil. En feil er en feil eller en feil i programmet som kan føre til at programmet oppfører seg feil.

Hvert programmeringsspråk har sin egen fremgangsmåte for å finne feil; På samme måte har bash også mange innebygde alternativer for å feilsøke et terminalprogram.

Å håndtere feil og feilsøke et program er ikke mindre enn et problem. Det er en tidkrevende jobb og kan forverres hvis du ikke er klar over de riktige verktøyene for å feilsøke programmet. Denne oppskriften er en komplett guide om feilsøking av bash-skript for å gjøre skriptet ditt feilfritt. Så la oss begynne:

Slik feilsøker du et bash -skript:

Når du jobber med store programmeringsprosjekter, støter du på mange feil eller feil. Noen ganger kan det være komplisert å feilsøke et program. Programmerere bruker vanligvis feilsøkingsverktøy, og mange koderedaktører hjelper også med å finne feil ved å markere syntaksen.

Det er forskjellige verktøy i Linux for å feilsøke koder, for eksempel GNU Debugger alias gdb. Verktøy som GDB er nyttige for programmeringsspråk som kompileres til binære filer. Siden bash er et enkelt tolket språk, er det ikke nødvendig med tunge verktøy for å feilsøke det.

Det er forskjellige tradisjonelle teknikker for å feilsøke en bash -skriptkode, og en av dem er å legge til Påstander. Påstander er betingelser som legges til i programmene for å kontrollere spesifikke forhold og utføre programmet deretter. Det er en defensiv teknikk som også hjelper til med å finne feil og teste. Du kan finne mange verktøy som hjelper til med å legge til påstander i bash -skript.

Vel, å legge til påstander er en av de gamle tradisjonelle teknikkene. Det er sett med flagg/alternativer tilgjengelig i bash for å feilsøke et bash -skript. Disse alternativene kan legges til sammen med shebang i skriptene eller legges til mens du kjører programmet i terminalen. Temaene vi skal ta opp er listet opp nedenfor:

  1. Slik feilsøker du bash script ved å aktivere verbose -v alternativ
  2. Hvordan feilsøke bash script ved hjelp av xtrace -x alternativ
  3. Hvordan feilsøke bash script ved hjelp av noexec -n alternativ
  4. Hvordan identifisere usettede variabler mens feilsøking av bash script
  5. Hvordan feilsøke bestemt del av bash -skriptet
  6. Hvordan feilsøke et bash -skript ved hjelp av felle kommando
  7. Hvordan feilsøke et bash -skript ved å eliminere fil globbing bruker -f alternativ
  8. hvordan kombinere feilsøkingsalternativer for å feilsøke et skallskript
  9. hvordan omdirigere feilsøkingsrapport til en fil

Så la oss sjekke forskjellige teknikker i bash for å feilsøke et bash -skript:

1. Hvordan feilsøke bash script ved å aktivere verbose -v alternativ:

En av de enkleste tilnærmingene for å feilsøke bash -skriptet er å bruke -v alternativ, også kjent som omfattende. Alternativet kan legges til med shebang eller eksplisitt settes med skriptfilnavnet mens du kjører det. Det omfattende alternativet vil utføre og skrive ut hver linje i koden som prosessen av tolken. La oss forstå det med et bash script -eksempel:

#! /bin/bash
kastet ut 'Skriv inn nummer 1'
lesenummer 1
kastet ut 'Skriv inn nummer 2'
leseNummer 2
hvis [ '$ nummer1' -gt '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er større enn nummer 2'
elif [ '$ nummer1' -ekv '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er lik nummer 2'
ellers
kastet ut 'Number2 er større enn Number1'
være

Koden ovenfor får to tall fra brukeren og utfører deretter noen betingede utsagn for å kontrollere om tallet er mer signifikant, mindre eller lik det andre angitte nummeret. Selv om en hvilken som helst tekstredigerer kan brukes til bash -skripting, bruker jeg Vim -editor. Vim er en kraftig, funksjonsrik redaktør som fremhever syntaksen til bash-skript og reduserer sjansen for syntaksfeil. Hvis du ikke har Vim -editor, kan du få den ved å kjøre kommandoen som er nevnt nedenfor:

$sudopassendeinstallere jeg kom

Lag en bash -skriptfil ved hjelp av:

$jeg komb_script.sh

Hvis du er ny i Vim editor, anbefaler jeg at du lærer hvordan du bruker vim -editoren før du fortsetter.

Nå, tilbake til skriptet, kjør skriptet ved å bruke -v alternativ:

$bash -vb_script.sh

Det kan sees i utdataene ovenfor at hver linje i skriptet skrives ut i terminalen mens de behandles av tolken. Vær oppmerksom på at skriptet slutter å ta input fra brukeren og deretter behandler neste linje i skriptet. Som diskutert ovenfor at -v alternativet kan plasseres etter shebang som vist i følgende:

#! / bin / bash -v

På samme måte kan det detaljerte flagget også legges til i neste linje med shebang ved hjelp av sett kommando:

#! /bin/bash
sett -v

En hvilken som helst av metodene som er diskutert ovenfor, kan aktivere omfattende.

2 Slik feilsøker du bash -skript ved å bruke alternativet xtrace -x:

Utførelsesspor, også kjent som xtrace, er et smart og nyttig feilsøkingsalternativ, spesielt for å spore logiske feil. Logiske feil er vanligvis forbundet med variabler og kommandoer. For å kontrollere variabelens tilstand under utførelsen av skriptet, bruker vi -x alternativ. Nå igjen, kjør b_script.sh filen med -x flagg:

$bash -xb_script.sh

Utgangen viser eksplisitt verdien av hver variabel under kjøringsprosessen. Igjen, -x kan brukes ved siden av shebang og etter shebang -linjen ved å bruke kommandoen set. Xtrace setter + -tegnet med hver linje i skriptet.

3 Slik feilsøker du bash script ved å bruke noexec -n alternativ:

Syntaksfeil er en av hovedårsakene til feil. For å syntaksisk feilsøke bash -skriptet, bruker vi noexec (ingen utførelse) -modus. Alternativet som brukes for noexec -modus er -n. Det vil bare vise syntaksfeilene i koden i stedet for å utføre den. En mye tryggere tilnærming til feilsøking av koden. La oss utføre b_script.sh igjen med -n alternativ:

$bash -nb_script.sh

Det vil ikke bli utført kode hvis det ikke er noen syntaksfeil. La oss nå endre koden vår:

#! /bin/bash

kastet ut 'Skriv inn nummer 1'
lesenummer 1
kastet ut 'Skriv inn nummer 2'
leseNummer 2
hvis [ '$ nummer1' -gt '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er større enn nummer 2'
elif [ '$ nummer1' -ekv '$ nummer 2' ]
#deretter
kastet ut 'Nummer 1 er lik nummer 2'
ellers
kastet ut 'Number2 er større enn Number1'
være

Jeg kommenterer deretter etter elif . Nå, med -n utfør b_script.sh manus:

$bash -nb_script.sh

Som forventet identifiserte den tydelig feilen og viste den i terminalen.

4 Hvordan identifisere de usettede variablene mens du feilsøker bash -skript:

Det er vanlig å skrive en skrivefeil mens du skriver en kode. Ofte skriver du feil en variabel som ikke lar koden utføres. For å identifisere en slik feil bruker vi -u alternativ. La oss endre koden igjen:

#! /bin/bash
kastet ut 'Skriv inn nummer 1'
lesenummer 1
kastet ut 'Skriv inn nummer 2'
leseNummer 2
hvis [ '$ num1' -gt '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er større enn nummer 2'
elif [ '$ nummer1' -ekv '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er lik nummer 2'
ellers
kastet ut 'Number2 er større enn Number1'
være

I det første hvis betinget uttalelse, ga jeg nytt navn til nummer 1 variabel til num1 . Nå num1 er en usett variabel. Kjør nå skriptet:

$bash -ub_script.sh

Utgangen har identifisert og viser eksplisitt navnet på en variabel som ikke er angitt.

5. Hvordan feilsøke den spesifikke delen av bash -skriptet:

Xtrace -modusen behandler hver linje i koden og gir utgang. Imidlertid vil det være tidkrevende å finne feil i en stor kode hvis vi allerede vet hvilken del som potensielt kan forårsake feilen. Heldigvis lar xtrace deg også feilsøke en bestemt del av koden, som kan oppnås ved hjelp av sett kommando. Plass sett -x i begynnelsen av delen som må feilsøkes og deretter sett +x på slutten. For eksempel vil jeg feilsøke betingede utsagn av b_script.sh , så jeg vil legge ved alle betingede utsagn i sett -x og sett +x alternativer som vist i koden nedenfor:

#! /bin/bash
kastet ut 'Skriv inn nummer 1'
lesenummer 1
kastet ut 'Skriv inn nummer 2'
leseNummer 2
sett -x
hvis [ '$ nummer' -gt '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er større enn nummer 2'
elif [ '$ nummer1' -ekv '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er lik nummer 2'
ellers
kastet ut 'Number2 er større enn Number1'
være
sett+ x

Kjør nå skriptet med bash b_script.sh .

Utdata feilsøker bare if -betingelsene som er angitt.

6. Hvordan feilsøke et bash -skript ved hjelp av trap -kommandoen:

Hvis skriptet ditt er komplisert, er det også mer utførlige teknikker for feilsøking. En av dem er felle kommando. De felle kommando fanger signalene og utfører en kommando når en spesifikk situasjon oppstår. Kommandoen kan være et signal eller en funksjon. Jeg har laget et annet skript ved navn sum_script.sh :

#! /bin/bash
felle 'echo' Linje $ {LINENO}: Det første tallet er $ number1, det andre tallet er $ number2 og summen er $ sum ''DEBUG
kastet ut 'Skriv inn første nummer'
lesenummer 1
kastet ut 'Skriv inn andre nummer'
leseNummer 2
sum= $[nummer1 + nummer2]
kastet ut 'er summen$ sum'

De felle kommando med DEBUG signal viser statusen til variablene nummer 1 , Nummer 2 og sum etter utførelsen av hver linje som vist i følgende utskriftsbilde:

De gule blokkene er tomme mellomrom fordi brukeren ennå ikke har angitt noen input; disse mellomromene fylles opp når brukeren angir verdier. Denne metoden er også ganske nyttig i feilsøking av bash -skript.

7. Hvordan feilsøke et bash -skript ved å eliminere filglobing ved å bruke alternativet -f:

Filglobing er en prosess for å finne filene med jokertegn, dvs. * og ? . I mange situasjoner trenger du ikke å utvide filer mens du feilsøker. I slike tilfeller kan du blokkere filen globbing ved hjelp av -f alternativ. La oss forstå det med et manus fglobe_script.sh :

#! /bin/bash
kastet ut 'Vis alle tekstfiler.'
ls *.tekst

Koden ovenfor viser alle tekstfilene i den nåværende katalogen, utfør:

$bashfglobe_script.sh

For å slå av filglobing, bruk -f alternativ:

$bash -ffglobe_script.sh

På samme måte kan du bruke den med shebang og med sett kommando også:

#! /bin/bash
kastet ut 'Vis alle tekstfiler.'
ls *.tekst
sett -f
kastet ut 'Vis alle tekstfiler'
ls *.tekst
sett+f

Nå, løp bash fglobe_script.sh:

Den delen som er vedlagt sett -f/sett +f alternativer behandlet ikke kommandoer med jokertegn.

8. Slik kombinerer du feilsøkingsalternativer til feilsøkingsskript:

Vi bruker bare ett alternativ i de ovennevnte feilsøkingsteknikkene, men vi kan kombinere forskjellige alternativer for bedre forståelse. La oss implementere -x og -v alternativer til sum_script.sh manus. Jeg bruker sum_script.sh manus.

#! /bin/bash
kastet ut 'Skriv inn første nummer'
lesenummer 1
kastet ut 'Skriv inn andre nummer'
leseNummer 2
sum= $[nummer1 + nummer2]
kastet ut 'er summen$ sum'

Utfør nå:

$bash -xvsum_script.sh

Både -x og -v utgangene kombineres, som vist i utgangsbildet. På samme måte kan vi også kombinere -u alternativ med omfattende -v for feildeteksjon. Jeg bytter ut nummer 1 variabel med på en i den sjette linjen i manuset:

#! /bin/bash
er$ nummer 2ogsumer$ sum'' DEBUG
kastet ut '
Skriv inn første nummer'
les nummer 1
kastet ut '
Skriv inn det andre nummeret'
les nummer 2
sum = $ [num + number2]
kastet ut '
desumer$ sum'

For å se utgangen, kjør kommandoen nedenfor:

$bash -uvsum_script.sh

9. Slik omdirigerer du feilsøkingsrapport til en fil:

Lagring av en feilsøkingsrapport for et bash -skript i en fil kan være nyttig i mange situasjoner. Det er litt vanskelig fordi å omdirigere feilsøkingsrapport til en fil; vi bruker noen spesielle variabler. La oss implementere det på b_script.sh kode:

#! /bin/bash
eksek 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
kastet ut 'Skriv inn nummer 1'
lesenummer 1
kastet ut 'Skriv inn nummer 2'
leseNummer 2
hvis [ '$ nummer' -gt '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er større enn nummer 2'
elif [ '$ nummer1' -ekv '$ nummer 2' ]
deretter
kastet ut 'Nummer 1 er lik nummer 2'
ellers
kastet ut 'Number2 er større enn Number1'
være

I den andre linjen i koden kan det sees at vi omdirigerer utgangen til a debug_report.log filen ved hjelp av eksek kommando med filbeskrivelse 5 (FD5).

exec 5> debug_report.log: De eksek kommandoen omdirigerer alt som skjer i skallet til en fil debug_report.log.

BASH_XTRACEFD = 5: Det er en bestemt bash -variabel og kan ikke brukes i noe annet skall. Den må tilordnes en gyldig filbeskrivelse, og bash vil skrive den ekstraherte utgangen til debug_report.log.

PS4 = '$ LINENO– ‘: Det er også en bash -variabel som brukes til å skrive ut linjenummeret mens feilsøking ved hjelp av xtrace -modus. Standardverdien til PS4 er + skilt

Skriptet ovenfor genererer en loggfil som heter debug_report.log, for å lese den, bruk katt kommando:

Konklusjon:

En kode full av feil kan også påvirke programmets ytelse og være skadelig for maskinvaren. Debugging er veldig avgjørende for hvert program siden det gjør programmet mer effektivt. Å finne eksisterende og potensielle feil under utviklingen av et program kan forhindre at programmet oppfører seg uventet. Store koder trenger vanligvis aktiv feilsøking, noe som forbedrer kodens effektivitet ved å eliminere de krevende delene av kode.

Mange programmeringsspråk og miljøer har sine egne ledsagerdefuglere. I bash scripting kan forskjellige teknikker implementeres for å feilsøke scriptet. Denne guiden fokuserte grundig på alle metodene som kan brukes til å finne feil i bash -skriptene. Så når du føler at bash-skriptet ditt ikke oppfører seg som forventet, kan du bruke noen av teknikkene nevnt ovenfor, men xtrace-modus (-x) er ganske nyttig i de fleste tilfeller.