Kif Twettaq il-Modalità ta' Debugging tal-Iċċekkjar tas-Sintassi fi Shell Scripts


Bdejna s-serje tad-debugging tal-iskript tal-qoxra billi spjegajna l-għażliet differenti tad-debugging u kif nippermettu l-modi tad-debugging tal-iskript tal-qoxra.

Wara li tikteb l-iskripts tal-qoxra tiegħek, huwa rrakkomandat li prattikament niċċekkjaw is-sintassi fl-iskripts qabel ma nħaddmuhom, għall-kuntrarju li nħarsu lejn l-output tagħhom biex nikkonfermaw li qed jaħdmu b'mod korrett.

F'din il-parti tas-serje, se ngħaddu minn kif nużaw il-mod ta 'debugging tal-iċċekkjar tas-sintassi. Ftakar li spjegajna l-għażliet differenti ta 'debugging fl-ewwel parti ta' din is-serje u hawnhekk, se nużawhom biex inwettqu debugging tal-iskript.

Qabel ma nimxu għall-fokus primarju ta 'din il-gwida, ejjew nesploraw fil-qosor il-mod verbose. Hija attivata mill-għażla ta' debugging -v, li tgħid lill-qoxra biex turi l-linji kollha fi skript waqt li jinqraw.

Biex turi kif jaħdem dan, hawn taħt hemm kampjun ta' script tal-qoxra biex lott jikkonverti immaġini PNG f'format JPG.

Ittajpjaha (jew tikkopja u waħħalha) f'fajl.

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

Imbagħad issalva l-fajl u agħmel l-iskritt eżekutibbli billi tuża l-kmand hawn taħt:

$ chmod +x script.sh

Nistgħu ninvokaw l-iskrittura u nuru l-linji kollha fiha hekk kif jinqraw mill-qoxra hekk:

$ bash -v script.sh

Niġu lura għas-suġġett ta' enfasi tagħna, Il--n jattiva l-mod ta' verifika tas-sintassi. Jagħti struzzjonijiet lill-qoxra biex bażikament taqra l-kmandi kollha, madankollu ma tesegwixxihomx, hija (qoxra) teżamina biss is-sintassi użata.

F'każ li jkun hemm żbalji fl-iskript tal-qoxra tiegħek, il-qoxra toħroġ l-iżbalji fuq it-terminal, inkella, ma turi xejn.

Is-sintassi għall-attivazzjoni tal-verifika tas-sintassi hija kif ġej:

$ bash -n script.sh

Minħabba li s-sintassi fl-iskrittura hija korretta, il-kmand t'hawn fuq ma juri l-ebda output. Għalhekk, ejja nippruvaw ineħħu l-kelma done li tagħlaq il-linja for u naraw jekk turix żball:

Hawn taħt hawn l-iskrittura tal-qoxra modifikata biex tikkonverti immaġini png f'lott f'format jpg li fih bug.

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

Issejvja l-fajl, imbagħad mexxih waqt li twettaq verifika tas-sintassi fih:

$ bash -n script.sh

Mill-output ta 'hawn fuq, nistgħu naraw li hemm problema ta' sintassi bl-iskrittura tagħna, il-linja for hija nieqsa kelma prinċipali ta 'l-għeluq done. U l-qoxra fittxetha sa l-aħħar tal-fajl u ladarba ma sabithiex (lest), il-qoxra stampat żball ta' sintassi:

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

Nistgħu wkoll ngħaqqdu l-mod verbose u l-mod ta 'verifika tas-sintassi flimkien:

$ bash -vn script.sh

Inkella, nistgħu nippermettu l-iċċekkjar tas-sintassi billi nimmodifikaw l-ewwel linja tal-iskrittura hawn fuq bħal fl-eżempju li jmiss.

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

Bħal qabel, issalva l-fajl u mexxih waqt li twettaq il-verifika tas-sintassi:

$ ./script.sh

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

Barra minn hekk, nistgħu nimpjegaw is-sett shell built-in kmand biex nippermettu l-mod ta 'debugging fl-iskrittura ta' hawn fuq.

Fl-eżempju hawn taħt, qed niċċekkjaw biss is-sintassi tal-for loop fl-iskrittura tagħna.

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

Għal darb'oħra, issalva l-fajl u invoka l-iskrittura:

$ ./script.sh 

Fil-qosor, għandna dejjem niżguraw li niċċekkjaw sintattikament l-iskripts tal-qoxra tagħna biex naqbdu kwalunkwe żball qabel ma nwettquhom.

Biex tibgħatilna xi mistoqsijiet jew feedback dwar din il-gwida, uża l-formola ta' tweġiba hawn taħt. Fit-tielet parti ta 'din is-serje, se nimxu biex nispjegaw u nużaw il-mod ta' debugging tat-traċċar tal-qoxra.