Kuidas teha süntaksikontrolli režiimi silumisrežiimi kontrollimist Shelli skriptides


Alustasime shelliskripti silumise seeriat, selgitades erinevaid silumisvalikuid ja kuidas lubada shelliskripti silumisrežiime.

Pärast shelliskriptide kirjutamist on soovitatav enne skriptide süntaksit enne nende käivitamist praktiliselt kontrollida, selle asemel, et vaadata nende väljundit, et veenduda nende õiges töös.

Seeria selles osas tutvume süntaksi kontrollimise silumisrežiimi kasutamisega. Pidage meeles, et me selgitasime selle seeria esimeses osas erinevaid silumisvõimalusi ja siin kasutame neid skripti silumiseks.

Enne selle juhendi esmasele fookusele liikumist uurime lühidalt üksikasjalikku režiimi. Selle lubab silumisvalik -v , mis käsib shellil kuvada kõik skripti read nende lugemise ajal.

Selle toimimise näitamiseks on allpool toodud shelliskripti näidis PNG-piltide JPG-vormingusse pakkide teisendamiseks.

Sisestage (või kopeerige ja kleepige) see faili.

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

Seejärel salvestage fail ja tehke skript käivitatavaks, kasutades järgmist käsku:

$ chmod +x script.sh

Saame käivitada skripti ja kuvada selles kõik read, kui kest loeb neid nii:

$ bash -v script.sh

Tulles tagasi meie rõhutatud teema juurde, aktiveerib -n süntaksikontrolli režiimi. See käsib kestal põhimõtteliselt kõiki käske lugeda, kuid ei täida neid, vaid uurib ainult seda süntaksit.

Juhul, kui teie shelliskriptis on vigu, väljastab shell vead terminalis, vastasel juhul ei kuvata midagi.

Süntaksikontrolli aktiveerimise süntaks on järgmine:

$ bash -n script.sh

Kuna skripti süntaks on õige, ei kuva ülaltoodud käsk ühtegi väljundit. Seetõttu proovime eemaldada sõna done , mis sulgeb for loopi, ja vaadake, kas selles on viga:

Allpool on muudetud shelliskript png-piltide pakkide teisendamiseks jpg-vormingusse, mis sisaldab viga.

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

Salvestage fail ja käivitage see süntaksit kontrollides:

$ bash -n script.sh

Ülaltoodud väljundist näeme, et meie skriptil on süntaksiprobleem, for loop'il puudub sulgev done märksõna. Ja kest otsis seda faili lõpuni ja kui seda ei leitud (valmis), printis kest süntaksivea:

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

Samuti võime kombineerida üksikasjaliku režiimi ja süntaksikontrolli režiimi koos:

$ bash -vn script.sh

Teise võimalusena võime lubada süntaksikontrolli, muutes ülaltoodud skripti esimest rida nagu järgmises näites.

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

Nagu varem, salvestage fail ja käivitage see süntaksikontrolli ajal:

$ ./script.sh

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

Lisaks saame ülaltoodud skriptis silumisrežiimi lubamiseks kasutada sisseehitatud käsku shell.

Allpool toodud näites kontrollime ainult oma skripti for for loopi süntaksit.

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

Veelkord salvestage fail ja käivitage skript:

$ ./script.sh 

Kokkuvõttes peaksime alati tagama, et enne nende käivitamist kontrollime süntaktiliselt oma shelliskripte võimalike vigade tabamiseks.

Selle juhendi kohta küsimuste või tagasiside saatmiseks kasutage allolevat vastusevormi. Selle seeria kolmandas osas liigume kesta jälitamise silumisrežiimi selgitamisele ja kasutamisele.