Kuinka suorittaa syntaksin virheenkorjaustilan tarkistus Shell-komentosarjoissa


Aloitimme komentosarjan komentosarjojen virheenkorjaussarjan selittämällä erilaiset virheenkorjausvaihtoehdot ja miten komentosarjan komentosarjojen virheenkorjaustilat otetaan käyttöön.

Shell-komentosarjojen kirjoittamisen jälkeen on suositeltavaa, että tarkistamme komentosarjojen syntaksin ennen niiden suorittamista sen sijaan, että tarkastelemme niiden lähtöä varmistaaksemme, että ne toimivat oikein.

Sarjan tässä osassa käydään läpi, miten syntaksitarkistusta käytetään virheenkorjaustilassa. Muista, että selitimme erilaisia virheenkorjausvaihtoehtoja tämän sarjan ensimmäisessä osassa, ja käytämme niitä komentosarjojen virheenkorjaukseen.

Ennen kuin siirrymme tämän oppaan ensisijaiseen painopisteeseen, tutustu lyhyesti sanatilaan. Se otetaan käyttöön virheenkorjausasetuksella -v , joka käskee kuoren näyttämään kaikki komentosarjan rivit lukemisen aikana.

Osoittaa, miten tämä toimii, alla on esimerkki komentosarjan komentosarjasta, jolla PNG-kuvat voidaan muuntaa JPG-muotoon.

Kirjoita (tai kopioi ja liitä) se tiedostoon.

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

Tallenna sitten tiedosto ja tee komentosarja suoritettavaksi seuraavalla komennolla:

$ chmod +x script.sh

Voimme käyttää komentosarjaa ja näyttää kaikki sen rivit, kun kuori lukee ne näin:

$ bash -v script.sh

Palataksemme painopisteeseemme, -n aktivoi syntaksintarkastustilan. Se kehottaa kuorta lukemaan periaatteessa kaikki komennot, mutta ei suorita niitä, se (kuori) tutkii vain käytettyä syntaksia.

Jos shell-komentosarjassa on virheitä, shell antaa virheet päätelaitteessa, muuten se ei näytä mitään.

Syntaksi syntaksitarkistuksen aktivoimiseksi on seuraava:

$ bash -n script.sh

Koska komentosarjan syntaksi on oikea, yllä oleva komento ei näytä mitään tulosta. Yritetään siksi poistaa done -sana, joka sulkee for-silmukan, ja katsotaanko siinä virhe

Alla on muokattu komentojonokomento, jolla muunnetaan png-kuvat erän jpg-muotoon, joka sisältää virheen.

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

Tallenna tiedosto ja suorita se suorittamalla siinä syntaksitarkistus:

$ bash -n script.sh

Yllä olevasta lähdöstä voimme nähdä, että komentosarjassa on syntaksiongelma, for-silmukasta puuttuu lopullinen done -avainsana. Ja kuori etsi sitä tiedoston loppuun asti, ja kun se ei löytänyt sitä (valmis), kuori tulosti syntaksivirheen:

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

Voimme myös yhdistää tarkan tilan ja syntaksin tarkistustilan yhdessä:

$ bash -vn script.sh

Vaihtoehtoisesti voimme ottaa syntaksitarkistuksen käyttöön muuttamalla yllä olevan komentosarjan ensimmäistä riviä kuten seuraavassa esimerkissä.

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

Kuten aiemmin, tallenna tiedosto ja suorita se suoritettaessa syntaksitarkistusta:

$ ./script.sh

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

Lisäksi voimme käyttää sisäänrakennettua komentotulkkikomentoa virheenkorjaustilan ottamiseksi käyttöön yllä olevassa komentosarjassa.

Alla olevassa esimerkissä tarkistamme vain komentosarjamme for-silmukan syntaksin.

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

Tallenna tiedosto uudelleen ja kutsu komentosarja:

$ ./script.sh 

Yhteenvetona voidaan todeta, että meidän on aina varmistettava, että tarkistamme shell-komentosarjamme syntaktisesti virheiden kaappaamiseksi ennen niiden suorittamista.

Lähetä meille tätä opasta koskevia kysymyksiä tai palautetta käyttämällä alla olevaa vastauslomaketta. Tämän sarjan kolmannessa osassa siirrymme kuoren jäljityksen virheenkorjaustilan selittämiseen ja käyttämiseen.