Vyhledávání na webu

Jak provést kontrolu syntaxe v režimu ladění ve skriptech Shell


Sérii ladění skriptů shellu jsme zahájili vysvětlením různých možností ladění a toho, jak povolit režimy ladění skriptů shellu.

Po napsání vašich shell skriptů se doporučuje, abychom prakticky zkontrolovali syntaxi ve skriptech před jejich spuštěním, místo abychom se podívali na jejich výstup, abychom si ověřili, že fungují správně.

V této části seriálu si projdeme, jak používat režim ladění kontroly syntaxe. Nezapomeňte, že jsme vysvětlili různé možnosti ladění v první části této série a zde je použijeme k provádění ladění skriptů.

Povolení režimu podrobného ladění

Než přejdeme k hlavnímu zaměření této příručky, pojďme krátce prozkoumat režim podrobného popisu. Umožňuje to ladicí volba -v, která říká shellu, aby zobrazoval všechny řádky ve skriptu, zatímco jsou čteny.

Abychom demonstrovali, jak to funguje, níže je ukázkový skript shellu pro dávkový převod obrázků PNG do formátu JPG.

Napište (nebo zkopírujte a vložte) jej do souboru.

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

Poté soubor uložte a vytvořte skript spustitelný pomocí příkazu níže:

chmod +x script.sh

Můžeme vyvolat skript a zobrazit všechny řádky v něm tak, jak je čte shell takto:

bash -v script.sh

Povolení režimu ladění kontroly syntaxe ve skriptech Shell

Vraťme se k našemu tématu důrazu, -n aktivuje režim kontroly syntaxe. Instruuje shell, aby v podstatě četl všechny příkazy, ale neprovádí je, pouze zkoumá použitou syntaxi.

V případě, že jsou ve vašem shell skriptu chyby, shell vypíše chyby na terminál, jinak nezobrazí nic.

Syntaxe pro aktivaci kontroly syntaxe je následující:

bash -n script.sh

Protože je syntaxe ve skriptu správná, výše uvedený příkaz nezobrazí žádný výstup. Pokusme se proto odstranit slovo hotovo, které uzavírá cyklus for, a zjistěte, zda zobrazuje chybu:

Níže je upravený skript shellu pro dávkový převod obrázků png do formátu jpg, který obsahuje chybu.

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

Uložte soubor a poté jej spusťte při kontrole syntaxe:

bash -n script.sh

Z výše uvedeného výstupu vidíme, že v našem skriptu je problém se syntaxí, ve smyčce for chybí závěrečné klíčové slovo hotovo. A shell to hledal až do konce souboru, a jakmile to nenašel (hotovo), shell vypsal chybu syntaxe:

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

Můžeme také kombinovat podrobný režim a režim kontroly syntaxe:

bash -vn script.sh

Alternativně můžeme povolit kontrolu syntaxe úpravou prvního řádku výše uvedeného skriptu jako v dalším příkladu.

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

Stejně jako dříve uložte soubor a spusťte jej při provádění kontroly syntaxe:

./script.sh

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

Kromě toho můžeme použít vestavěný příkaz set shell k povolení režimu ladění ve skriptu výše.

V níže uvedeném příkladu pouze kontrolujeme syntaxi cyklu for v našem skriptu.

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

Znovu uložte soubor a vyvolejte skript:

./script.sh 

Stručně řečeno, měli bychom vždy zajistit, abychom syntakticky zkontrolovali naše skripty shellu, abychom zachytili jakoukoli chybu, než je spustíme.

Chcete-li nám zaslat jakékoli dotazy nebo zpětnou vazbu týkající se této příručky, použijte formulář odpovědí níže. Ve třetí části této série přejdeme k vysvětlení a používání režimu ladění trasování shellu.