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.