Kā veikt sintakses atkļūdošanas režīma pārbaudi čaulas skriptos


Mēs sākām čaulas skriptu atkļūdošanas sēriju, izskaidrojot dažādas atkļūdošanas iespējas un to, kā iespējot čaulas skriptu atkļūdošanas režīmus.

Pēc čaulas skriptu uzrakstīšanas ieteicams pirms skriptu palaišanas praktiski pārbaudīt sintaksi, nevis apskatīt to izvadi, lai apstiprinātu, ka tie darbojas pareizi.

Šajā sērijas daļā mēs iepazīsimies ar sintakses pārbaudes atkļūdošanas režīma izmantošanu. Atcerieties, ka šīs sērijas pirmajā daļā mēs izskaidrojām dažādas atkļūdošanas iespējas, un šeit mēs tās izmantosim skriptu atkļūdošanai.

Pirms pārejam uz šīs rokasgrāmatas galveno uzmanību, īsi izpētīsim daudzveidīgo režīmu. To iespējo atkļūdošanas opcija -v , kas liek čaulai parādīt visas skripta rindas, kamēr tās tiek lasītas.

Lai parādītu, kā tas darbojas, tālāk ir sniegts čaulas skripta paraugs, lai PNG attēlus sērijveidā pārveidotu JPG formātā.

Ierakstiet (vai kopējiet un ielīmējiet) failā.

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"
done
exit 0

Pēc tam saglabājiet failu un izveidojiet skriptu izpildāmu, izmantojot zemāk esošo komandu:

$ chmod +x script.sh

Mēs varam izsaukt skriptu un parādīt visas tajā esošās rindas, kad čaula tās nolasa šādi:

$ bash -v script.sh

Atgriežoties pie mūsu akcentētās tēmas, -n tiek aktivizēts sintakses pārbaudes režīms. Tas liek čaulai būtībā izlasīt visas komandas, tomēr tās neizpilda, tā (čaula) pārbauda tikai izmantoto sintaksi.

Gadījumā, ja čaumalas skriptā ir kļūdas, čaula izved kļūdas terminālā, pretējā gadījumā tas neko neparāda.

Sintakses pārbaudes aktivizēšanas sintakse ir šāda:

$ bash -n script.sh

Tā kā skripta sintakse ir pareiza, augstāk esošajā komandā netiks parādīta neviena izeja. Tāpēc mēģināsim noņemt vārdu done , kas aizver for for ciklu, un pārbaudīsim, vai tajā ir redzama kļūda:

Zemāk ir modificēts čaulas skripts, lai partijas pārveidotu png attēlus jpg formātā, kurā ir kļūda.

#!/bin/bash
#script with a bug
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"

exit 0

Saglabājiet failu un pēc tam palaidiet to, veicot sintakses pārbaudi tajā:

$ bash -n script.sh

No iepriekš minētās izejas mēs varam redzēt, ka mūsu skriptam ir sintakses problēma, for ciklam trūkst aizvēršanas atslēgas vārda done . Apvalks to meklēja līdz faila beigām un, kad to neatrada (izdarīts), čaula izdrukāja sintakses kļūdu:

script.sh: line 11: syntax error: unexpected end of file

Mēs varam arī apvienot daudzveidīgo režīmu un sintakses pārbaudes režīmu:

$ bash -vn script.sh

Alternatīvi, mēs varam iespējot sintakses pārbaudi, modificējot augstāk esošā skripta pirmo rindu, kā nākamajā piemērā.

#!/bin/bash -n
#altering the first line of a script to enable syntax checking

#convert
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

exit 0

Tāpat kā iepriekš, saglabājiet failu un palaidiet to, veicot sintakses pārbaudi:

$ ./script.sh

script.sh: line 12: syntax error: unexpected end of file

Turklāt mēs varam izmantot iestatīto čaulas iebūvēto komandu, lai iespējotu atkļūdošanas režīmu iepriekš minētajā skriptā.

Tālāk sniegtajā piemērā mēs pārbaudām tikai skripta for loop sintaksi.

#!/bin/bash
#using set shell built-in command to enable debugging
#convert

#enable debugging
set -n
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

#disable debugging
set +n
exit 0

Vēlreiz saglabājiet failu un izsauciet skriptu:

$ ./script.sh 

Apkopojot, mums vienmēr jānodrošina, ka pirms izpildes mēs sintaktiski pārbaudām savus čaulas skriptus, lai notvertu kļūdas.

Lai nosūtītu mums jautājumus vai atsauksmes par šo ceļvedi, izmantojiet zemāk esošo atbildes veidlapu. Šīs sērijas trešajā daļā mēs pāriesim uz čaulas izsekošanas atkļūdošanas režīma izskaidrošanu un izmantošanu.