“Shell” skriptlerinde sintaksis barlagyny düzetmek tertibini nädip ýerine ýetirmeli


Gabyk skriptini düzetmek seriýasyny dürli düzediş opsiýalaryny we gabyk skriptini düzetmek usullaryny nädip işletmelidigini düşündirmek bilen başladyk.

Gabyk skriptleriňizi ýazanyňyzdan soň, dogry işleýändigini tassyklamak üçin çykyşlaryna seretmezden, skriptlerdäki sintaksisleri iş ýüzünde barlamagy maslahat berýäris.

Tapgyryň bu bölüminde sintaksis barlagyny düzetmek tertibini nädip ulanmalydygyny öwreneris. Seriesadyňyzdan çykarmaň, bu tapgyryň birinji bölüminde dürli düzediş wariantlaryny düşündirdik we şu ýerde, skript düzedişlerini ýerine ýetirmek üçin ulanarys.

Bu gollanmanyň esasy ugruna geçmezden ozal, söz düzümini gysgaça öwreneliň. Bu, okalýan wagty gabyga ähli setirleri skriptde görkezmegi tabşyrýan -v düzediş opsiýasy bilen işledilýär.

Munuň nähili işleýändigini görkezmek üçin aşakda PNG şekillerini JPG formatyna öwürmek üçin gabyk skriptiniň nusgasy bar.

Faýla ýazyň (ýa-da göçüriň).

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

Soňra faýly ýazdyryň we aşakdaky buýrugy ulanyp skripti ýerine ýetirip bilersiňiz:

$ chmod +x script.sh

Scriptazgydan peýdalanyp, içindäki ähli setirleri gabyk ýaly okaýarka görkezip bileris:

$ bash -v script.sh

Üns beriş mowzugymyza gaýdyp gelsek, -n sintaksis barlag tertibini işjeňleşdirýär. Gabykda ähli buýruklary esasan okamagy tabşyrýar, ýöne olary ýerine ýetirmeýär, (gabyk) diňe ulanylýan sintaksisi gözden geçirýär.

Gabyk skriptiňizde ýalňyşlyklar bar bolsa, gabyk terminaldaky ýalňyşlyklary çykarar, ýogsam hiç zat görkezmez.

Sintaksis barlagyny işjeňleşdirmek üçin sintaksis aşakdaky ýaly:

$ bash -n script.sh

Scriptazgydaky sintaksis dogry bolany üçin, ýokardaky buýruk hiç hili çykyş görkezmez. Şonuň üçin, geliň aýlawy ýapýan we ýalňyşdygyny görkezýän ýerine ýetirilen sözüni aýyrmaga synanyşalyň:

Aşakda png şekillerini bir näsazlygy öz içine alýan jpg formata öwürmek üçin üýtgedilen gabyk skripti.

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

Faýly ýazdyryň, sintaksis barlagyny ýerine ýetireniňizde işlediň:

$ bash -n script.sh

Aboveokardaky çykyşdan, skriptimizde sintaksis meselesiniň bardygyny görüp bileris, aýlaw üçin ýapylýan ýerine ýetirilen açar söz sözi ýok. Gabyk ony faýlyň ahyryna çenli gözledi we tapylmansoň, gabyk sintaksis ýalňyşyny çap etdi:

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

Şeýle hem, söz düzümini we sintaksis barlag re modeimini birleşdirip bileris:

$ bash -vn script.sh

Ativea-da bolmasa, indiki mysaldaky ýaly ýokardaky skriptiň birinji setirini üýtgedip sintaksis barlagyny açyp bileris.

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

Öňküsi ýaly, sintaksis barlagy geçirilende faýly ýatda saklaň we işlediň:

$ ./script.sh

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

Mundan başga-da, ýokardaky skriptde düzediş tertibini işletmek üçin gurlan gabyk gurlan buýrugy ulanyp bileris.

Aşakdaky mysalda, diňe skriptimizdäki aýlawyň sintaksisini barlaýarys.

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

Fileene bir gezek faýly ýazdyryň we skriptden peýdalanyň:

$ ./script.sh 

Gysgaça aýdanymyzda, elmydama ýalňyşlyk goýbermek üçin gabyk skriptlerimizi sintaktik taýdan barlamagymyzy üpjün etmelidiris.

Bu gollanma bilen baglanyşykly haýsydyr bir sorag ýa-da seslenme ibermek üçin aşakdaky jogap görnüşini ulanyň. Bu tapgyryň üçünji bölüminde, gabyk yzarlamak düzediş tertibini düşündirmäge we ulanmaga geçeris.