Slik utfører du feilsøkingsmodus for syntakskontroll i Shell-skript
Vi startet shell script debugging-serien ved å forklare de forskjellige feilsøkingsalternativene og hvordan du aktiverer shell script debugging moduser.
Etter å ha skrevet shell-skriptene dine, anbefales det at vi praktisk talt sjekker syntaksen i skriptene før du kjører dem, i motsetning til å se på utdataene deres for å bekrefte at de fungerer som de skal.
I denne delen av serien skal vi gå gjennom hvordan du bruker syntakssjekking av feilsøkingsmodus. Husk at vi forklarte de forskjellige feilsøkingsalternativene i den første delen av denne serien, og her vil vi bruke dem til å utføre skriptfeilsøking.
Før vi går til hovedfokuset i denne veiledningen, la oss kort utforske den detaljerte modusen. Det er aktivert av -v
feilsøkingsalternativet, som forteller skallet å vise alle linjer i et skript mens de leses.
For å demonstrere hvordan dette fungerer, nedenfor er et eksempel på et skallskript for batchkonvertering av PNG-bilder til JPG-format.
Skriv (eller kopier og lim inn) den i en fil.
#!/bin/bash #convert for image in *.png; do convert "$image" "${image%.png}.jpg" echo "image $image converted to ${image%.png}.jpg" done exit 0
Lagre deretter filen og gjør skriptet kjørbart ved å bruke kommandoen nedenfor:
$ chmod +x script.sh
Vi kan påkalle skriptet og vise alle linjene i det når de leses av skallet slik:
$ bash -v script.sh
For å komme tilbake til temaet vårt, aktiverer -n
syntakskontrollmodus. Det instruerer skallet til å lese alle kommandoene, men utfører dem ikke, det (skallet) undersøker bare syntaksen som brukes.
I tilfelle det er feil i skallskriptet ditt, vil skallet sende ut feilene på terminalen, ellers viser det ingenting.
Syntaksen for å aktivere syntakskontroll er som følger:
$ bash -n script.sh
Fordi syntaksen i skriptet er riktig, vil ikke kommandoen ovenfor vise noe utdata. La oss derfor prøve å fjerne done
-ordet som lukker for-løkken og se om det viser en feil:
Nedenfor er det modifiserte shell-skriptet for batchkonvertering av png-bilder til jpg-format som inneholder en feil.
#!/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
Lagre filen, og kjør den mens du utfører syntakskontroll i den:
$ bash -n script.sh
Fra utdataene ovenfor kan vi se at det er et syntaksproblem med skriptet vårt, for-løkken mangler et avsluttende done
søkeordord. Og skallet så etter det til slutten av filen, og når det ikke fant det (ferdig), skrev skallet ut en syntaksfeil:
script.sh: line 11: syntax error: unexpected end of file
Vi kan like godt kombinere den verbose modusen og syntakskontrollmodusen sammen:
$ bash -vn script.sh
Alternativt kan vi aktivere syntakskontroll ved å endre den første linjen i skriptet ovenfor som i neste eksempel.
#!/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
Som før, lagre filen og kjør den mens du utfører syntakskontroll:
$ ./script.sh script.sh: line 12: syntax error: unexpected end of file
I tillegg kan vi bruke den innebygde set shell-kommandoen for å aktivere feilsøkingsmodus i skriptet ovenfor.
I eksemplet nedenfor sjekker vi kun syntaksen til for-løkken i skriptet vårt.
#!/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
Igjen, lagre filen og påkall skriptet:
$ ./script.sh
Oppsummert bør vi alltid sørge for at vi syntaktisk sjekker shell-skriptene våre for å fange opp eventuelle feil før vi kjører dem.
For å sende oss spørsmål eller tilbakemeldinger angående denne veiledningen, bruk svarskjemaet nedenfor. I den tredje delen av denne serien skal vi gå over til å forklare og bruke feilsøkingsmodus for skallsporing.