Kako izvesti način preverjanja sintakse za odpravljanje napak v skriptih lupine


Serijo razhroščevanja skriptov lupine smo začeli tako, da smo razložili različne možnosti odpravljanja napak in kako omogočiti načine razhroščevanja skriptov lupine.

Po pisanju lupinskih skriptov je priporočljivo, da pred izvajanjem praktično preverimo skladnjo v skriptih, namesto da bi si ogledali njihov izhod in se prepričali, da delujejo pravilno.

V tem delu serije bomo prebrali, kako uporabiti način za odpravljanje napak pri preverjanju sintakse. Ne pozabite, da smo v prvem delu te serije razložili različne možnosti odpravljanja napak in tukaj jih bomo uporabili za razhroščevanje skriptov.

Preden se premaknemo na glavni poudarek tega vodnika, na kratko raziščimo podroben način. Omogoča ga možnost odpravljanja napak -v , ki lupini sporoča, naj med branjem prikaže vse vrstice v skriptu.

Spodaj je prikazan primer tega, kako to deluje, za pretvorbo slik PNG v format JPG.

Vnesite (ali kopirajte in prilepite) v datoteko.

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

Nato shranite datoteko in s spodnjim ukazom naredite skript izvršljiv:

$ chmod +x script.sh

Skript lahko prikličemo in prikažemo vse vrstice v njem, ko jih lupina prebere takole:

$ bash -v script.sh

Če se vrnemo k naši temi s poudarkom, -n aktivira način preverjanja skladnje. Lupini naroči, da v bistvu prebere vse ukaze, vendar jih ne izvrši, temveč (lupina) preuči samo uporabljeno sintakso.

Če so v vašem skriptu lupine napake, bo lupina napake prikazala na terminalu, sicer pa ne prikaže ničesar.

Sintaksa za aktiviranje preverjanja skladnje je naslednja:

$ bash -n script.sh

Ker je sintaksa v skriptu pravilna, zgornji ukaz ne bo prikazal nobenega izhoda. Zato poskusimo odstraniti besedo done , ki zapre zanko for, in preverimo, ali kaže napako:

Spodaj je spremenjen skript lupine za paketno pretvorbo slik png v jpg format, ki vsebuje napako.

#!/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

Shranite datoteko in jo nato zaženite med preverjanjem skladnje v njej:

$ bash -n script.sh

Iz zgornjega izhoda lahko vidimo, da je pri našem skriptu težava s sintakso, v zanki for manjka zaključna beseda done . In lupina jo je iskala do konca datoteke in ko je ni našla (dokončana), je lupina natisnila sintaksno napako:

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

Lahko tudi združimo podroben način in način preverjanja skladnje:

$ bash -vn script.sh

Lahko tudi omogočimo preverjanje skladnje s spreminjanjem prve vrstice zgornjega skripta, kot v naslednjem primeru.

#!/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

Kot prej shranite datoteko in jo zaženite med preverjanjem skladnje:

$ ./script.sh

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

Poleg tega lahko uporabimo vdelani ukaz set shell, da omogočimo način odpravljanja napak v zgornjem skriptu.

V spodnjem primeru preverjamo samo sintakso zanke for v našem skriptu.

#!/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

Še enkrat shranite datoteko in pokličite skript:

$ ./script.sh 

Če povzamemo, vedno bi morali zagotoviti, da pred izvajanjem sintaksično preverimo skripte lupine, da zajamemo morebitne napake.

Če nam želite poslati kakršna koli vprašanja ali povratne informacije v zvezi s tem vodnikom, uporabite spodnji obrazec za odgovor. V tretjem delu te serije bomo prešli na razlago in uporabo načina odpravljanja napak sledenja lupine.