Kā atkļūdot bash skriptu?

How Debug Bash Script




Jebkurai programmai ir jābūt bez kļūdām, pirms tā nonāk pie patērētājiem. Programmatūras izstrādātāji cenšas darīt visu iespējamo, lai padarītu programmatūras programmas bez kļūdām. Bet ir grūti padarīt kodu nevainojamu, ja ir tūkstošiem rindu. Atkļūdošana ir nepārtraukts process; tas palīdz nekavējoties atklāt kļūdas, apkopot vērtīgu informāciju par kodu un novērst liekos koda gabalus.

Visām programmēšanas valodām ir dažas kopīgas un dažas atšķirīgas pieejas kļūdu atrašanai. Piemēram, atkļūdošanas programmas var izmantot, lai ātri novērstu kļūdas. Tā kā čaulas skriptēšanai nav īpaša koda atkļūdošanas rīka. Šis raksts ir par dažādu atkļūdošanas metožu apspriešanu, kuras var izmantot, lai bash skripts būtu bez kļūdām. Pirms iedziļināties metodēs, mums būs pamatzināšanas par čaumalām un čaulas skriptiem:







Kas ir apvalks Linux?

Sākot datoru, kodols iegūst informāciju par pievienoto aparatūru un ļauj mijiedarboties ar citiem pievienotajiem komponentiem. Bez tam tas pārvalda atmiņu, centrālo procesoru un atpazīst visas jaunas perifērijas ierīces. Kopumā kodols ir jebkuras operētājsistēmas mugurkauls. Bet vai esat kādreiz domājuši tieši mijiedarboties ar kodolu, pavēlēt tam veikt konkrētu uzdevumu? Vai tas ir pat praktiski izdarāms? Pilnīgi noteikti! Ar čaulu, datorprogrammu ar interaktīvu interfeisu, ikviens var vadīt kodolu. Apvalks ļauj cilvēkiem mijiedarboties ar kodolu un uzdot tam veikt jebkuru uzdevumu.



Programmā Unix ir divi galvenie apvalki Burna apvalks un C apvalks . Abiem šiem veidiem ir savas apakškategorijas. Ir dažādi Bourne čaumalu veidi Korn apvalks (ksh), Almquist apvalks (pelni), Bourne atkal apvalks (bash), un Z apvalks (zsh) . Tajā pašā laikā C apvalkam ir savas apakškategorijas, piemēram C apvalks (csh) un TENEX C apvalks (tcsh) . Kā minēts iepriekš, no visiem apvalkiem Bašs (Bourne atkal apvalks) ir visplašāk izmantotais apvalks, un tas ir pieejams daudzos Linux izplatījumos, jo tas ir efektīvs un lietotājam draudzīgs.



Bash ir daudzu Linux izplatījumu noklusējuma apvalks, un to plaši izmanto miljoniem Linux lietotāju. Tas ir tik daudzveidīgs un ietekmīgs, ka var izpildīt katru uzdevumu, ko parasti veicat lietotnēs, kuru pamatā ir GUI. Varat rediģēt failus, pārvaldīt failus, skatīt fotoattēlus, klausīties mūziku, atskaņot videoklipus un daudz ko citu.





Kas ir čaulas skripts:

Kā mēs esam iemācījušies čaulas pamatideju, tagad pāriesim pie čaulas skriptu rakstīšanas. Korpusa skripts ir datorprogramma, kas apvalkā izpilda vairākas komandas, kas darbojas kā tulks, lai veiktu noteiktu funkciju. Kā minēts iepriekš, ir 2 konkrēti čaumalu veidi. Tomēr šī rokasgrāmata koncentrējas uz Bourne Again apvalku (Bash).
Tātad, kas ir bash skripts? Linux operētājsistēmā visas bash komandas tiek saglabātas /usr /bin un /bin mapes. Piemēram, ikreiz, palaižot komandu, bash meklē, vai tā pastāv direktorijā. Komanda tiek izpildīta, ja tā direktorijos atrod citu kļūdu.

Kā būtu ar tāda uzdevuma veikšanu, kura izpildei terminālī ir vajadzīgas vairākas komandas? Šajā konkrētajā situācijā bash skripti var jums palīdzēt. Bash skripti ir čaulas skriptu veids, kas ļauj izveidot programmas, lai tās izpildītu vairākas bash komandas, lai veiktu noteiktu uzdevumu.



Kādas ir bash skriptu kļūdas:

Strādājot ar bash skriptu vai ar citām programmēšanas valodām, jūs saskaraties ar daudzām kļūdām. Kļūda ir kļūda vai kļūda programmā, kas var izraisīt programmas nepareizu darbību.

Katrai programmēšanas valodai ir sava procedūra kļūdu atrašanai; līdzīgi bash ir arī daudzas iebūvētas opcijas termināla programmas atkļūdošanai.

Kļūdu pārvaldība un programmas atkļūdošana ir ne mazāk kā apgrūtinājums. Tas ir laikietilpīgs darbs un var pasliktināties, ja nezināt pareizos programmas atkļūdošanas rīkus. Šis raksts ir pilnīgs ceļvedis par bash skriptu atkļūdošanu, lai jūsu skripts būtu bez kļūdām. Tātad sāksim:

Kā atkļūdot bash skriptu:

Strādājot pie lieliem programmēšanas projektiem, rodas daudz kļūdu vai kļūdu. Programmas atkļūdošana dažreiz var būt sarežģīta. Programmētāji parasti izmanto atkļūdošanas rīkus, un daudzi koda redaktori arī palīdz atrast kļūdas, izceļot sintaksi.

Linux ir dažādi rīki kodu atkļūdošanai, piemēram, GNU Debugger aka gdb. Tādi rīki kā GDB ir noderīgi programmēšanas valodās, kas tiek apkopotas bināros failos. Tā kā bash ir vienkārša interpretējama valoda, tās atkļūdošanai nav nepieciešami smagi rīki.

Bash skripta koda atkļūdošanai ir dažādas tradicionālās metodes, un viena no tām ir pievienošana Apgalvojumi. Apgalvojumi ir nosacījumi, kas tiek pievienoti programmās, lai pārbaudītu īpašus nosacījumus un atbilstoši izpildītu programmu. Tā ir aizsardzības metode, kas palīdz atrast kļūdas un pārbaudīt. Jūs varat atrast daudz instrumentus kas palīdz pievienot apgalvojumus bash skriptos.

Apgalvojumu pievienošana ir viena no vecajām tradicionālajām metodēm. Bash ir pieejami karodziņu/opciju komplekti, lai atkļūdotu bash skriptu. Šīs opcijas var pievienot kopā ar shebang skriptos vai pievienot, izpildot programmu terminālī. Tālāk ir uzskaitītas tēmas, kuras mēs apspriedīsim:

  1. Kā atkļūdot bash skriptu, iespējojot daudzsološs -v iespēja
  2. Kā atkļūdot bash skriptu, izmantojot xtrace -x iespēja
  3. Kā atkļūdot bash skriptu, izmantojot noexec -n iespēja
  4. Kā identificēt neiestatīt mainīgos bash skripta atkļūdošanas laikā
  5. Kā atkļūdot konkrēta daļa no bash skripta
  6. Kā atkļūdot bash skriptu, izmantojot slazds komandu
  7. Kā atkļūdot bash skriptu, novēršot failu ielīmēšana izmantojot -f iespēja
  8. kombinēt atkļūdošanas iespējas, lai atkļūdotu čaulas skriptu
  9. novirzīt atkļūdošanas ziņojumu uz failu

Tāpēc pārbaudīsim dažādas bash metodes, lai atkļūdotu bash skriptu:

1. Kā atkļūdot bash skriptu, iespējojot detalizētu opciju -v:

Viena no vienkāršākajām metodēm bash skripta atkļūdošanai ir -v iespēja, kas pazīstama arī kā daudznozīmīga. Opciju var pievienot, izmantojot shebang, vai skaidri norādīt ar skripta faila nosaukumu, izpildot to. Detalizētā opcija izpildīs un izdrukās katru koda rindu kā tulka procesu. Sapratīsim to ar bash skripta piemēru:

#! /bin/bash
izmest ārā 'Ievadiet numuru1'
lasītnumurs1
izmest ārā 'Ievadiet skaitli2'
lasītnumurs 2
ja [ '$ numurs1' -gt '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir lielāks par skaitli2'
elifs [ '$ numurs1' -ekv '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir vienāds ar skaitli2'
citādi
izmest ārā 'Skaitlis 2 ir lielāks par skaitli 1'
būt

Iepriekš minētais kods saņem divus skaitļus no lietotāja un pēc tam veic dažus nosacījumus, lai pārbaudītu, vai skaitlis ir nozīmīgāks, mazāks vai vienāds ar citu ievadīto numuru. Lai gan bash skriptēšanai var izmantot jebkuru teksta redaktoru, es izmantoju Vim redaktoru. Vim ir spēcīgs, daudzfunkcionāls redaktors, kas izceļ bash skriptu sintaksi un samazina sintakses kļūdu iespējamību. Ja jums nav Vim redaktora, iegūstiet to, palaižot zemāk minēto komandu:

$sudotrāpīgsuzstādīt ES atnācu

Izveidojiet bash skripta failu, izmantojot:

$ES atnācub_script.sh

Ja esat iesācējs Vim redaktorā, iesaku mācīties kā izmantot vim redaktoru pirms turpināt.

Tagad, atgriežoties pie skripta, izpildiet skriptu, izmantojot -v iespēja:

$bash -vb_script.sh

Iepriekš redzamajā iznākumā var redzēt, ka katra skripta rinda tiek iespiesta terminālī, kad tulks tos apstrādā. Ņemiet vērā, ka skripts pārtrauks lietotāja ievadīšanu un pēc tam apstrādās nākamo skripta rindu. Kā minēts iepriekš, ka -v opciju var ievietot pēc shebang, kā parādīts tālāk:

#! / bin / bash -v

Tāpat daudzsološo karodziņu var pievienot arī nākamajā shebang rindiņā, izmantojot komplekts komanda:

#! /bin/bash
komplekts -v

Jebkura no iepriekš aprakstītajām metodēm var iespējot detalizētu.

2 Kā atkļūdot bash skriptu, izmantojot opciju xtrace -x:

Izpildes izsekošana, kas pazīstama arī kā xtrace, ir gudra un noderīga atkļūdošanas iespēja, īpaši loģisko kļūdu izsekošanai. Loģiskās kļūdas parasti ir saistītas ar mainīgajiem lielumiem un komandām. Lai pārbaudītu mainīgā stāvokli skripta izpildes laikā, mēs izmantojam -x iespēja. Tagad atkal palaidiet b_script.sh failu ar -x karogs:

$bash -xb_script.sh

Izvade skaidri parāda katra mainīgā vērtību izpildes procesa laikā. Atkal, -x var izmantot blakus shebang un pēc shebang līnijas, izmantojot komandu set. Xtrace ievieto + zīmi ar katru skripta rindiņu.

3 Kā atkļūdot bash skriptu, izmantojot opciju noexec -n:

Sintakses kļūdas ir viens no galvenajiem kļūdu cēloņiem. Lai sintaktiski atkļūdotu bash skriptu, mēs izmantojam noexec (bez izpildes) režīms. Noexec režīmam izmantotā opcija ir -n. Tas parādīs tikai koda sintakses kļūdas, nevis izpildīs to. Daudz drošāka pieeja koda atkļūdošanai. Izpildīsim b_script.sh atkal ar -n iespēja:

$bash -nb_script.sh

Ja nav sintakses kļūdas, kods netiks izpildīts. Tagad mainīsim mūsu kodu:

#! /bin/bash

izmest ārā 'Ievadiet numuru1'
lasītnumurs1
izmest ārā 'Ievadiet skaitli2'
lasītnumurs 2
ja [ '$ numurs1' -gt '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir lielāks par skaitli2'
elifs [ '$ numurs1' -ekv '$ numurs2' ]
#tad
izmest ārā 'Skaitlis1 ir vienāds ar skaitli2'
citādi
izmest ārā 'Skaitlis 2 ir lielāks par skaitli 1'
būt

Es komentēju tad pēc elifs . Tagad ar -n izpildi b_script.sh skripts:

$bash -nb_script.sh

Kā paredzēts, tas skaidri identificēja kļūdu un parādīja to terminālī.

4 Kā noteikt neiestatītos mainīgos bash skripta atkļūdošanas laikā:

Kļūda, rakstot kodu, ir izplatīta. Bieži vien jūs nepareizi ierakstāt mainīgo, kas neļauj izpildīt kodu. Lai identificētu šādu kļūdu, mēs izmantojam -u iespēja. Vēlreiz mainīsim kodu:

#! /bin/bash
izmest ārā 'Ievadiet numuru1'
lasītnumurs1
izmest ārā 'Ievadiet skaitli2'
lasītnumurs 2
ja [ '$ num1' -gt '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir lielāks par skaitli2'
elifs [ '$ numurs1' -ekv '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir vienāds ar skaitli2'
citādi
izmest ārā 'Skaitlis 2 ir lielāks par skaitli 1'
būt

Pirmajā ja nosacītu paziņojumu, es pārdēvēju numurs1 mainīgs līdz num1 . Tagad num1 ir nemainīgs mainīgais. Tagad palaidiet skriptu:

$bash -ub_script.sh

Izvade ir identificējusi un skaidri parāda neiestatīta mainīgā nosaukumu.

5. Kā atkļūdot konkrēto bash skripta daļu:

Xtrace režīms apstrādā katru koda rindu un dod izvadi. Tomēr kļūdu atrašana lielā kodā būtu laikietilpīga, ja mēs jau zinām, kura daļa var izraisīt kļūdu. Par laimi, xtrace arī ļauj atkļūdot noteiktu koda daļu, ko var paveikt, izmantojot komplekts komandu. Vieta komplekts -x tās daļas sākumā, kuru nepieciešams atkļūdot, un pēc tam komplekts +x beigās. Piemēram, es vēlos atkļūdot nosacītos paziņojumus b_script.sh , tāpēc es pievienošu visus nosacītos paziņojumus komplekts -x un komplekts +x opcijas, kā parādīts zemāk esošajā kodā:

#! /bin/bash
izmest ārā 'Ievadiet numuru1'
lasītnumurs1
izmest ārā 'Ievadiet skaitli2'
lasītnumurs 2
komplekts -x
ja [ '$ numurs' -gt '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir lielāks par skaitli2'
elifs [ '$ numurs1' -ekv '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir vienāds ar skaitli2'
citādi
izmest ārā 'Skaitlis 2 ir lielāks par skaitli 1'
būt
komplekts+ x

Tagad palaidiet skriptu, izmantojot bash b_script.sh .

Izvade atkļūdo tikai tad, ja ir norādīti nosacījumi.

6. Kā atkļūdot bash skriptu, izmantojot trap komandu:

Ja jūsu skripts ir sarežģīts, tad ir arī sarežģītākas metodes atkļūdošanai. Viens no tiem ir slazds komandu. The slazds komanda uztver signālus un izpilda komandu, kad rodas konkrēta situācija. Komanda var būt signāls vai funkcija. Esmu izveidojis citu skriptu ar nosaukumu sum_script.sh :

#! /bin/bash
slazds 'echo' Line $ {LINENO}: pirmais numurs ir $ number1, otrais numurs ir $ number2 un summa ir $ summa ''DEBUG
izmest ārā 'Ievadiet pirmo numuru'
lasītnumurs1
izmest ārā 'Ievadiet otro numuru'
lasītnumurs 2
summa= $[skaitlis1 + skaitlis2]
izmest ārā 'summa ir$ summa'

The slazds komandu ar DEBUG signāls parāda mainīgo statusu numurs1 , numurs 2 un summa pēc katras rindas izpildes, kā parādīts šādā izvades attēlā:

Dzeltenie bloki ir tukšas vietas, jo lietotājs vēl nav ievadījis nevienu ievadi; šīs vietas tiks aizpildītas, kad lietotājs ievadīs vērtības. Šī metode ir diezgan noderīga arī bash skriptu atkļūdošanā.

7. Kā atkļūdot bash skriptu, novēršot failu kustību, izmantojot opciju -f:

Failu kopēšana ir process, kurā tiek atrasti faili ar aizstājējzīmēm, t.i. * un ? . Daudzās situācijās atkļūdošanas laikā nav nepieciešams paplašināt failus. Šādos gadījumos varat bloķēt faila kopēšanu, izmantojot -f iespēja. Sapratīsim to ar skriptu fglobe_script.sh :

#! /bin/bash
izmest ārā 'Parādīt visus teksta failus.'
ls *.txt

Iepriekš minētais kods parādīs visus teksta failus pašreizējā direktorijā, izpildiet:

$bashfglobe_script.sh

Lai izslēgtu failu apkopošanu, izmantojiet -f iespēja:

$bash -ffglobe_script.sh

Līdzīgi jūs varat to izmantot ar shebang un ar komplekts arī komandu:

#! /bin/bash
izmest ārā 'Parādīt visus teksta failus.'
ls *.txt
komplekts -f
izmest ārā 'Parādīt visus teksta failus'
ls *.txt
komplekts+f

Tagad skrien bash fglobe_script.sh:

Daļa, kas pievienota set -f/set +f opcijas neapstrādāja komandas ar aizstājējzīmēm.

8. Kā apvienot atkļūdošanas opcijas, lai atkļūdotu čaulas skriptu:

Iepriekš minētajās atkļūdošanas metodēs mēs izmantojam tikai vienu opciju, bet varam labāk apvienot dažādas iespējas. Īstenosim -x un -v iespējas uz sum_script.sh skripts. Es izmantoju sum_script.sh skripts.

#! /bin/bash
izmest ārā 'Ievadiet pirmo numuru'
lasītnumurs1
izmest ārā 'Ievadiet otro numuru'
lasītnumurs 2
summa= $[skaitlis1 + skaitlis2]
izmest ārā 'summa ir$ summa'

Tagad izpildiet:

$bash -xvsum_script.sh

Abi -x un -v izejas tiek apvienotas, kā parādīts izvades attēlā. Līdzīgi mēs varam arī apvienot -u iespēja ar detalizētu -v kļūdu noteikšanai. Es nomainu numurs1 mainīgs ar uz vienu skripta sestajā rindā:

#! /bin/bash
ir$ numurs2unsummair$ summa'' DEBUG
izmest ārā '
Ievadiet pirmo numuru'
lasīt numuru 1
izmest ārā '
Ievadiet otro numuru'
lasīt numuru 2
summa = $ [numurs + skaitlis2]
izmest ārā '
unsummair$ summa'

Lai skatītu izvadi, palaidiet zemāk minēto komandu:

$bash -uvsum_script.sh

9. Kā novirzīt atkļūdošanas ziņojumu uz failu:

Bash skripta atkļūdošanas pārskata saglabāšana failā var būt noderīga daudzās situācijās. Tas ir mazliet sarežģīti, jo atkļūdošanas ziņojumu novirzīt uz failu; mēs izmantojam dažus īpašus mainīgos. Īstenosim to tālāk b_script.sh kods:

#! /bin/bash
izpildītājs 5>dubug_report.log
BASH_XTRACED=“5”
PS4='$ LINENO-'
izmest ārā 'Ievadiet numuru1'
lasītnumurs1
izmest ārā 'Ievadiet skaitli2'
lasītnumurs 2
ja [ '$ numurs' -gt '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir lielāks par skaitli2'
elifs [ '$ numurs1' -ekv '$ numurs2' ]
tad
izmest ārā 'Skaitlis1 ir vienāds ar skaitli2'
citādi
izmest ārā 'Skaitlis 2 ir lielāks par skaitli 1'
būt

Koda otrajā rindā redzams, ka mēs novirzām izvadi uz a debug_report.log failu, izmantojot izpildītājs komanda ar faila deskriptoru 5 (FD5).

exec 5> debug_report.log: The izpildītājs komanda novirza visu čaulā notiekošo uz failu debug_report.log.

BASH_XTRACEFD = 5: Tas ir konkrēts bash mainīgais un to nevar izmantot nevienā citā apvalkā. Tam jāpiešķir derīgs faila deskriptors, un bash rakstīs iegūto izvadi debug_report.log.

PS4 = $ LINENO– ‘: Tas ir arī bash mainīgais, ko izmanto, lai drukātu rindas numuru, veicot atkļūdošanu, izmantojot xtrace režīmu. PS4 noklusējuma vērtība ir + zīme

Iepriekš minētais skripts ģenerē žurnālfailu ar nosaukumu debug_report.log, lai to izlasītu, izmantojiet kaķis komanda:

Secinājums:

Kods, kas pilns ar kļūdām, var ietekmēt programmas veiktspēju un kaitēt arī aparatūrai. Atkļūdošana ir ļoti svarīga katrai programmai, jo tā padara programmu efektīvāku. Programmas izstrādes laikā atrodot esošās un iespējamās kļūdas, jūsu programma var negaidīti rīkoties. Lieliem kodiem parasti nepieciešama aktīva atkļūdošana, uzlabojot koda efektivitāti, novēršot iespēju izmantot koda gabalus.

Daudzām programmēšanas valodām un vidēm ir savi pavadošie atkļūdotāji. Bash skriptos skripta atkļūdošanai var ieviest dažādas metodes. Šī rokasgrāmata rūpīgi koncentrējās uz visām metodēm, kuras var izmantot, lai atrastu kļūdas bash skriptos. Tāpēc ikreiz, kad jūtat, ka jūsu bash skripts nedarbojas, kā paredzēts, izmantojiet kādu no iepriekš minētajām metodēm, taču vairumā gadījumu xtrace režīms (-x) ir diezgan noderīgs.