Kako izvršiti način otklanjanja pogrešaka provjere sintakse u skriptama ljuske


Započeli smo seriju otklanjanja pogrešaka skripte ljuske objašnjavajući različite opcije otklanjanja pogrešaka i kako omogućiti načine otklanjanja pogrešaka skripte ljuske.

Nakon što napišete svoje skripte ljuske, preporučuje se da praktički provjerimo sintaksu u skriptama prije njihovog pokretanja, umjesto da gledamo njihov izlaz kako bismo potvrdili da rade ispravno.

U ovom dijelu serije proći ćemo kroz način korištenja načina otklanjanja pogrešaka provjere sintakse. Ne zaboravite da smo objasnili različite opcije otklanjanja pogrešaka u prvom dijelu ove serije, a ovdje ćemo ih koristiti za izvođenje otklanjanja pogrešaka skripte.

Omogućivanje Verbose načina otklanjanja pogrešaka

Prije nego što prijeđemo na primarni fokus ovog vodiča, ukratko istražimo verbose način. Omogućuje ga opcija otklanjanja pogrešaka -v, koja govori ljusci da prikaže sve retke u skripti dok se čitaju.

Da biste demonstrirali kako ovo funkcionira, u nastavku je primjer skripte ljuske za skupnu konverziju PNG slika u JPG format.

Upišite (ili kopirajte i zalijepite) u datoteku.

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

Zatim spremite datoteku i učinite skriptu izvršnom pomoću donje naredbe:

chmod +x script.sh

Možemo pozvati skriptu i prikazati sve retke u njoj dok ih ljuska čita ovako:

bash -v script.sh

Omogućivanje načina otklanjanja pogrešaka provjere sintakse u skriptama ljuske

Vraćajući se na našu temu naglaska, -n aktivira način provjere sintakse. On upućuje ljusku da u osnovi pročita sve naredbe, ali ih ne izvršava, ona (ljuska) samo ispituje korištenu sintaksu.

U slučaju da postoje pogreške u vašoj skripti ljuske, ljuska će prikazati pogreške na terminalu, u protivnom neće prikazati ništa.

Sintaksa za aktiviranje provjere sintakse je sljedeća:

bash -n script.sh

Budući da je sintaksa u skripti ispravna, gornja naredba neće prikazati nikakav izlaz. Stoga, pokušajmo ukloniti riječ done koja zatvara for petlju i vidjeti pokazuje li pogrešku:

Ispod je modificirana skripta ljuske za skupnu konverziju png slika u jpg format koji sadrži grešku.

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

Spremite datoteku, zatim je pokrenite dok u njoj vršite provjeru sintakse:

bash -n script.sh

Iz gornjeg izlaza možemo vidjeti da postoji problem sintakse s našom skriptom, petlji for nedostaje ključna riječ za zatvaranje done. I ljuska ju je tražila do kraja datoteke i kada je nije pronašla (gotovo), ispisala je sintaktičku pogrešku:

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

Također možemo kombinirati verbose način i način provjere sintakse zajedno:

bash -vn script.sh

Alternativno, možemo omogućiti provjeru sintakse modificiranjem prvog retka gornje skripte kao u sljedećem primjeru.

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

Kao i prije, spremite datoteku i pokrenite je dok obavljate provjeru sintakse:

./script.sh

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

Osim toga, možemo upotrijebiti ugrađenu naredbu set shell da omogućimo način otklanjanja pogrešaka u gornjoj skripti.

U donjem primjeru samo provjeravamo sintaksu for petlje u našoj skripti.

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

Još jednom spremite datoteku i pozovite skriptu:

./script.sh 

Ukratko, uvijek bismo trebali osigurati da sintaktički provjeravamo naše skripte ljuske kako bismo uhvatili bilo kakvu pogrešku prije njihovog izvršavanja.

Da biste nam poslali bilo kakva pitanja ili povratne informacije u vezi s ovim vodičem, upotrijebite obrazac za odgovor u nastavku. U trećem dijelu ove serije prijeći ćemo na objašnjenje i korištenje načina otklanjanja pogrešaka praćenja ljuske.