Hvordan fejler man et bash -script?

How Debug Bash Script




Ethvert program skal være fri for fejl, før det når forbrugere. Softwareudviklere gør deres bedste for at gøre softwareprogrammerne fejlfrie. Men det er svært at lave en kode fejlfri, når der er tusindvis af linjer. Debugging er en løbende proces; det hjælper med straks at opdage fejl, indsamle værdifuld information om kode og eliminere overflødige kodebiter.

Alle programmeringssprog har nogle fælles og få forskellige metoder til at finde fejl. F.eks. Kan fejlfindingsprogrammer bruges til hurtigt at fjerne fejl. Hvorimod shell scripting ikke har noget særligt værktøj til at fejlsøge koden. Denne opskrift handler om at diskutere forskellige fejlfindingsteknikker, der kan bruges til at gøre bash-scriptet fejlfrit. Inden vi dykker ned i metoderne, lad os have en grundlæggende forståelse af skaller og shell -scripting:







Hvad er skallen i Linux?

Når du starter din computer op, får kernen oplysninger om den vedhæftede hardware og tillader andre vedhæftede komponenter at interagere. Bortset fra det administrerer det hukommelse, CPU og genkender enhver ny perifer enhed. Alt i alt er en kerne rygraden i ethvert operativsystem. Men har du nogensinde tænkt på at interagere direkte med kernen, kommando den til at udføre en bestemt opgave? Er det overhovedet praktisk muligt at gøre det? Absolut! Ved hjælp af en skal, et computerprogram med en interaktiv grænseflade kan enhver betjene kernen. Skallen tillader mennesker at interagere med kernen og instruere den i at udføre enhver opgave.



I Unix er der to hovedskaller Bourne skal og C skal . Begge disse typer har deres underkategorier. Forskellige typer Bourne skaller er Korn skal (ksh), Almquist skal (aske), Bourne igen skal (bash), og Z skal (zsh) . På samme tid har C -skallen sine egne underkategorier som C shell (csh) og TENEX C skal (tcsh) . Som nævnt ovenfor, ud af alle skallerne, Bash (Bourne igen skal) er den mest udbredte skal og kommer ud af kassen i mange Linux-distributioner på grund af dens effektivitet og brugervenlighed.



Bash er standardskallen for mange Linux -distributioner og bruges i vid udstrækning af millioner af Linux -brugere. Den er så mangfoldig og indflydelsesrig, at den kan udføre alle de opgaver, du normalt udfører i GUI-baserede applikationer. Du kan redigere filer, administrere filer, se fotos, lytte til musik, afspille videoer og meget mere.





Hvad er et Shell Script:

Da vi har lært den grundlæggende idé om shell, lad os nu bevæge os mod shell -scripting. Shell -scriptet er et computerprogram, der udfører flere kommandoer i en shell, der fungerer som tolk til at udføre en bestemt funktion. Som diskuteret ovenfor er der 2 særlige typer skaller. Denne guide fokuserer imidlertid på Bourne Again -skallen (Bash).
Så hvad er et bash script? I Linux gemmes alle bash -kommandoer i /usr /bin og /bin mapper. For eksempel, når du kører en kommando, søger bash efter, om den findes i biblioteket eller ej. Kommandoen udføres, hvis den finder i bibliotekerne, ellers giver en fejl.

Hvad med at udføre en opgave, der har brug for flere kommandoer for at køre i terminalen? I denne specifikke situation kan bash scripting hjælpe dig. Bash -scripting er en form for shell -scripting, som giver dig mulighed for at lave programmer til at køre flere bash -kommandoer for at udføre en bestemt opgave.



Hvad er fejl i bash scripting:

Mens du arbejder med bash scripting eller med andre programmeringssprog, støder du på mange fejl. En fejl er en fejl eller en fejl i programmet, der kan få programmet til at opføre sig forkert.

Hvert programmeringssprog har sin egen procedure til at finde fejl; på samme måde har bash også mange indbyggede muligheder for at fejlsøge et terminalprogram.

Håndtering af fejl og fejlfinding af et program er ikke mindre end et besvær. Det er et tidskrævende job og kan forværres, hvis du ikke er opmærksom på de rigtige værktøjer til at fejlsøge dit program. Denne opskrift er en komplet vejledning om fejlfinding af bash-scripts for at gøre dit script fejlfrit. Så lad os begynde:

Sådan debugger du et bash -script:

Når du arbejder på store programmeringsprojekter, støder du på mange fejl eller fejl. Debugging af et program kan nogle gange være kompliceret. Programmerere bruger normalt fejlfindingsværktøjer, og mange kodeditorer hjælper også med at finde fejl ved at fremhæve syntaksen.

Der er forskellige værktøjer i Linux til fejlfindingskoder, for eksempel GNU Debugger aka gdb. Værktøjer som GDB er nyttige til programmeringssprog, der kompileres til binære filer. Da bash er et enkelt fortolket sprog, er der ikke behov for tunge værktøjer til at fejlsøge det.

Der er forskellige traditionelle teknikker til fejlfinding af en bash scripting kode, og en af ​​dem tilføjer Påstande. Påstande er betingelser, der tilføjes i programmerne for at kontrollere specifikke betingelser og udføre programmet i overensstemmelse hermed. Det er en defensiv teknik, der også hjælper med at finde fejl og teste. Du kan finde mange værktøjer der hjælper med at tilføje påstande i bash -scripts.

Nå, tilføjelse af påstande er en af ​​de gamle traditionelle teknikker. Der er sæt flag/muligheder tilgængelige i bash for at fejlsøge et bash -script. Disse muligheder kan tilføjes sammen med shebang i scripts eller tilføjes, mens programmet udføres i terminalen. De emner, vi vil tage op, er anført nedenfor:

  1. Sådan debug bash script ved at aktivere ordret -v mulighed
  2. Sådan debug bash script ved hjælp af xtrace -x mulighed
  3. Sådan debug bash script ved hjælp af noexec -n mulighed
  4. Sådan identificeres usetede variabler mens debugging bash script
  5. Sådan fejler du specifik del af bash scriptet
  6. Sådan debugger du et bash -script ved hjælp af fælde kommando
  7. Sådan debugger du et bash -script ved at fjerne fil globbing bruger -f mulighed
  8. Hvordan forene fejlfindingsmuligheder for at fejlsøge et shell -script
  9. Hvordan omdiriger fejlfindingsrapport til en fil

Så lad os kontrollere forskellige teknikker i bash for at fejlsøge et bash -script:

1. Sådan debug bash script ved at aktivere verbose -v option:

En af de letteste metoder til fejlfinding af bash -scriptet er at bruge -v mulighed, også kendt som omfattende. Indstillingen kan tilføjes med shebang eller eksplicit sættes med scriptfilnavnet, mens den udføres. Den omfattende indstilling vil udføre og udskrive hver linje i koden som processen af ​​tolken. Lad os forstå det med et bash script -eksempel:

#! /bin/bash
smed ud 'Indtast nummer1'
Læsnummer 1
smed ud 'Indtast nummer 2'
Læsnummer 2
hvis [ '$ nummer1' -gt '$ nummer2' ]
derefter
smed ud 'Nummer1 er større end nummer2'
elif [ '$ nummer1' -ækv '$ nummer2' ]
derefter
smed ud 'Nummer 1 er lig med nummer 2'
andet
smed ud 'Nummer2 er større end nummer1'
være

Ovenstående kode får to tal fra brugeren og udfører derefter nogle betingede udsagn for at kontrollere, om tallet er mere signifikant, mindre eller lig med det andet indtastede nummer. Selvom enhver teksteditor kan bruges til bash -scripting, bruger jeg Vim -editor. Vim er en kraftfuld, funktionsrig editor, der fremhæver syntaxen for bash-scripts og reducerer chancerne for syntaksfejl. Hvis du ikke har Vim -editor, kan du hente den ved at køre kommandoen nævnt nedenfor:

$sudopassendeinstallere jeg kom

Opret en bash -scriptfil ved hjælp af:

$jeg komb_script.sh

Hvis du er ny i Vim -editor, anbefaler jeg, at du lærer hvordan man bruger vim -editoren før du fortsætter.

Nu, tilbage til scriptet, udfør scriptet ved hjælp af -v mulighed:

$bash -vb_script.sh

Det kan ses i ovenstående output, at hver linje i scriptet udskrives i terminalen, når de behandles af tolken. Bemærk, at scriptet holder op med at tage input fra brugeren og derefter behandler den næste linje i scriptet. Som diskuteret ovenfor, at -v option kan placeres efter shebang som vist i følgende:

#! / bin / bash -v

På samme måde kan det omfattende ord også tilføjes i den næste linje med shebang ved hjælp af sæt kommando:

#! /bin/bash
sæt -v

Enhver af de metoder, der er diskuteret ovenfor, kan aktivere omfattende.

2 Sådan debug bash script ved hjælp af xtrace -x option:

Udførelsesspor, også kendt som xtrace, er en smart og nyttig fejlfindingsindstilling, især for at spore logiske fejl. Logiske fejl er normalt forbundet med variabler og kommandoer. For at kontrollere variabelens tilstand under udførelsen af ​​scriptet bruger vi -x mulighed. Nu igen, kør b_script.sh fil med -x flag:

$bash -xb_script.sh

Outputtet viser eksplicit værdien af ​​hver variabel under udførelsesprocessen. Igen, den -x kan bruges ved siden af ​​shebang og efter shebang -linjen ved hjælp af kommandoen set. Xtrace sætter + -tegnet med hver linje i scriptet.

3 Sådan debug bash script ved hjælp af noexec -n option:

Syntaksfejl er en af ​​de primære årsager til fejl. Til syntaktisk fejlfinding af bash -scriptet bruger vi noexec (ingen udførelse) -tilstand. Den mulighed, der bruges til noexec -tilstand, er -n. Det viser kun kodens syntaksfejl i stedet for at udføre det. En meget sikrere tilgang til fejlfinding af koden. Lad os udføre b_script.sh igen med -n mulighed:

$bash -nb_script.sh

Der vil ikke blive udført kode, hvis der ikke er nogen syntaksfejl. Lad os nu ændre vores kode:

#! /bin/bash

smed ud 'Indtast nummer1'
Læsnummer 1
smed ud 'Indtast nummer 2'
Læsnummer 2
hvis [ '$ nummer1' -gt '$ nummer2' ]
derefter
smed ud 'Nummer1 er større end nummer2'
elif [ '$ nummer1' -ækv '$ nummer2' ]
#derefter
smed ud 'Nummer 1 er lig med nummer 2'
andet
smed ud 'Nummer2 er større end nummer1'
være

Jeg kommenterer derefter efter elif . Nu med -n udfør b_script.sh manuskript:

$bash -nb_script.sh

Som forventet identificerede den tydeligt fejlen og viste den i terminalen.

4 Sådan identificeres de ikke -indstillede variabler under fejlfinding af bash -script:

Det er almindeligt at lave en stavefejl, mens du skriver en kode. Ofte skriver du en fejl i en variabel, som ikke lader koden udføre. For at identificere en sådan fejl bruger vi -u mulighed. Lad os ændre koden igen:

#! /bin/bash
smed ud 'Indtast nummer1'
Læsnummer 1
smed ud 'Indtast nummer 2'
Læsnummer 2
hvis [ '$ num1' -gt '$ nummer2' ]
derefter
smed ud 'Nummer1 er større end nummer2'
elif [ '$ nummer1' -ækv '$ nummer2' ]
derefter
smed ud 'Nummer 1 er lig med nummer 2'
andet
smed ud 'Nummer2 er større end nummer1'
være

Først og fremmest hvis betinget erklæring, omdøbte jeg til nummer 1 variabel til num1 . Nu num1 er en uset variabel. Kør nu scriptet:

$bash -ub_script.sh

Outputtet har identificeret og viser eksplicit navnet på en ikke -indstillet variabel.

5. Sådan debugger du den specifikke del af bash -scriptet:

Xtrace -tilstanden behandler hver linje i koden og giver output. Imidlertid ville det være tidskrævende at finde fejl i en stor kode, hvis vi allerede ved, hvilken del der potentielt kan forårsage fejlen. Heldigvis giver xtrace dig også mulighed for at fejlsøge en bestemt del af koden, som kan udføres ved hjælp af sæt kommando. Placere sæt -x i begyndelsen af ​​den del, der skal debugges og derefter sæt +x i slutningen. For eksempel vil jeg fejlsøge de betingede udsagn om b_script.sh , så jeg vil vedlægge alle betingede udsagn i sæt -x og sæt +x muligheder som vist i koden herunder:

#! /bin/bash
smed ud 'Indtast nummer1'
Læsnummer 1
smed ud 'Indtast nummer 2'
Læsnummer 2
sæt -x
hvis [ '$ nummer' -gt '$ nummer2' ]
derefter
smed ud 'Nummer1 er større end nummer2'
elif [ '$ nummer1' -ækv '$ nummer2' ]
derefter
smed ud 'Nummer 1 er lig med nummer 2'
andet
smed ud 'Nummer2 er større end nummer1'
være
sæt+ x

Kør nu scriptet vha bash b_script.sh .

Output fejler kun if -betingelserne som angivet.

6. Sådan debugger du et bash -script ved hjælp af trap -kommandoen:

Hvis dit script er kompliceret, er der også mere detaljerede teknikker til fejlfinding. En af dem er fælde kommando. Det fælde kommando fanger signalerne og udfører en kommando, når der opstår en specifik situation. Kommandoen kan være et signal eller en funktion. Jeg har oprettet et andet script ved navn sum_script.sh :

#! /bin/bash
fælde 'echo' Linje $ {LINENO}: Første tal er $ nummer1, Andet tal er $ nummer2 og sum er $ sum ''FEJLFINDE
smed ud 'Indtast første nummer'
Læsnummer 1
smed ud 'Indtast andet nummer'
Læsnummer 2
sum= $[nummer1 + nummer2]
smed ud 'summen er$ sum'

Det fælde kommando med FEJLFINDE signal viser status for variablerne nummer 1 , nummer 2 og sum efter udførelsen af ​​hver linje som vist i følgende outputbillede:

De gule blokke er tomme mellemrum, fordi brugeren endnu ikke har indtastet noget input; disse mellemrum fyldes, når brugeren indtaster værdier. Denne metode er også ganske nyttig til fejlfinding af bash -scripts.

7. Sådan debugger du et bash -script ved at fjerne fil globbing ved hjælp af -f optionen:

Filglobning er en proces til at finde filerne med jokertegn, dvs. * og ? . I mange situationer behøver du ikke at udvide filer under fejlfinding. I sådanne tilfælde kan du blokere filen globbing ved hjælp af -f mulighed. Lad os forstå det med et script fglobe_script.sh :

#! /bin/bash
smed ud 'Vis alle tekstfiler.'
ls *.txt

Ovenstående kode viser alle tekstfilerne i det aktuelle bibliotek, udfør:

$bashfglobe_script.sh

For at deaktivere filglobning skal du bruge -f mulighed:

$bash -ffglobe_script.sh

På samme måde kan du bruge det med shebang og med sæt kommando også:

#! /bin/bash
smed ud 'Vis alle tekstfiler.'
ls *.txt
sæt -f
smed ud 'Vis alle tekstfiler'
ls *.txt
sæt+f

Nu, løb bash fglobe_script.sh:

Den del, der er vedlagt sæt -f/sæt +f optioner behandlede ikke kommandoer med jokertegn.

8. Sådan kombineres fejlfindingsindstillinger til fejlsøgning af shell -script:

Vi bruger kun en mulighed i ovennævnte fejlfindingsteknikker, men vi kan kombinere forskellige muligheder for bedre forståelse. Lad os implementere -x og -v muligheder til sum_script.sh manuskript. Jeg bruger sum_script.sh manuskript.

#! /bin/bash
smed ud 'Indtast første nummer'
Læsnummer 1
smed ud 'Indtast andet nummer'
Læsnummer 2
sum= $[nummer1 + nummer2]
smed ud 'summen er$ sum'

Udfør nu:

$bash -xvsum_script.sh

Begge -x og -v output kombineres som vist i outputbilledet. På samme måde kan vi også kombinere -u mulighed med omfattende -v til fejlregistrering. Jeg erstatter nummer 1 variabel med på en i scriptets sjette linje:

#! /bin/bash
er$ nummer2ogsumer$ sum' ' FEJLFINDE
smed ud '
Indtast første nummer'
læs nummer 1
smed ud '
Indtast andet nummer'
læs nummer 2
sum = $ [num + nummer2]
smed ud '
detsumer$ sum'

For at se output, skal du køre nedenstående kommando:

$bash -uvsum_script.sh

9. Sådan omdirigeres fejlretningsrapport til en fil:

At gemme en fejlfindingsrapport for et bash -script i en fil kan være praktisk i mange situationer. Det er lidt svært, fordi at omdirigere fejlfindingsrapport til en fil; vi bruger nogle særlige variabler. Lad os implementere det på b_script.sh kode:

#! /bin/bash
exec 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
smed ud 'Indtast nummer1'
Læsnummer 1
smed ud 'Indtast nummer 2'
Læsnummer 2
hvis [ '$ nummer' -gt '$ nummer2' ]
derefter
smed ud 'Nummer1 er større end nummer2'
elif [ '$ nummer1' -ækv '$ nummer2' ]
derefter
smed ud 'Nummer 1 er lig med nummer 2'
andet
smed ud 'Nummer2 er større end nummer1'
være

I den anden linje i koden kan det ses, at vi omdirigerer output til a debug_report.log fil ved hjælp af exec kommando med filbeskrivelse 5 (FD5).

exec 5> debug_report.log: Det exec kommando omdirigerer alt, hvad der sker i skallen, til en fil debug_report.log.

BASH_XTRACEFD = 5: Det er en bestemt bash -variabel og kan ikke bruges i nogen anden skal. Det skal tildeles en gyldig filbeskrivelse, og bash vil skrive det ekstraherede output til debug_report.log.

PS4 = ’$ LINENO– ‘: Det er også en bash -variabel, der bruges til at udskrive linjenummeret, mens fejlfinding ved hjælp af xtrace -tilstand. Standardværdien for PS4 er + skilt

Ovenstående script genererer en logfil kaldet debug_report.log, for at læse det, brug kat kommando:

Konklusion:

En kode fuld af fejl kan også påvirke programmets ydeevne og være skadelig for hardwaren. Debugging er meget afgørende for hvert program, da det gør programmet mere effektivt. At finde eksisterende og potentielle fejl under udviklingen af ​​et program kan forhindre dit program i at opføre sig uventet. Store koder har normalt brug for aktiv fejlfinding, hvilket forbedrer kodens effektivitet ved at eliminere de regressforbrugende stykker kode.

Mange programmeringssprog og miljøer har deres egne ledsagende fejlfindere. I bash scripting kan forskellige teknikker implementeres til fejlfinding af scriptet. Denne vejledning fokuserede grundigt på alle de metoder, der kan bruges til at finde fejl i bash -scripts. Så når du føler, at dit bash-script ikke opfører sig som forventet, skal du bruge nogen af ​​de ovennævnte teknikker, men xtrace-tilstand (-x) er i de fleste tilfælde temmelig nyttig.