Jak ladit bash skript?

How Debug Bash Script




Jakýkoli program musí být bez chyb, než se dostane k zákazníkům. Vývojáři softwaru se snaží, aby softwarové programy byly bez chyb. Je však těžké udělat kód bezchybný, když existují tisíce řádků. Ladění je pokračující proces; pomáhá okamžitě detekovat chyby, shromažďovat cenné informace o kódu a odstraňovat nadbytečné bloky kódu.

Všechny programovací jazyky mají některé společné a několik odlišných přístupů k hledání chyb. K rychlému odstranění chyb lze například použít ladicí programy. Zatímco skriptování prostředí Shell nemá žádný konkrétní nástroj pro ladění kódu. Tento zápis je o diskusi o různých technikách ladění, které lze použít k tomu, aby byl bash skript bez chyb. Než se ponoříme do metod, pojďme si udělat základní představu o skořápkách a skriptování skořepin:







Jaký je shell v Linuxu?

Když spustíte počítač, jádro získá informace o připojeném hardwaru a umožní interakci ostatním připojeným komponentám. Kromě toho spravuje paměť, CPU a rozpoznává všechny nové periferie. Celkově je jádro páteří jakéhokoli operačního systému. Ale napadlo vás někdy komunikovat přímo s jádrem, přikázat mu, aby provedlo konkrétní úkol? Je to vůbec proveditelné? Absolutně! S pomocí shellu, počítačového programu s interaktivním rozhraním, může kdokoli ovládat jádro. Shell umožňuje lidem komunikovat s jádrem a instruovat ho, aby provedl jakýkoli úkol.



V Unixu existují dva hlavní shelly Bourneova skořápka a C skořápka . Oba tyto typy mají své podkategorie. Různé typy Bourneových granátů jsou Korn shell (ksh), Almquist shell (popel), Bourne znovu shell (bash), a Z shell (zsh) . Současně má shell C své vlastní podkategorie jako C shell (csh) a Skořepina TENEX C. (tcsh) . Jak bylo uvedeno výše, ze všech skořápek Bash (Bourne znovu shell) je nejpoužívanější shell a vychází z krabice v mnoha distribucích Linuxu kvůli jeho účinnosti a uživatelské přívětivosti.



Bash je výchozí prostředí mnoha distribucí Linuxu a je hojně využíváno miliony uživatelů Linuxu. Je tak rozmanitý a vlivný, že dokáže provádět všechny úkoly, které obvykle provádíte v aplikacích založených na GUI. Můžete upravovat soubory, spravovat soubory, prohlížet fotografie, poslouchat hudbu, přehrávat videa a mnoho dalšího.





Co je skript Shell:

Když jsme se naučili základní myšlenku shellu, přejděme nyní ke skriptování shellu. Shell skript je počítačový program, který provádí více příkazů v shellu, který funguje jako tlumočník pro provádění konkrétní funkce. Jak bylo uvedeno výše, existují 2 konkrétní typy skořepin. Tato příručka se však zaměřuje na shell Bourne Again (Bash).
Co je to tedy bash skript? V Linuxu jsou všechny příkazy bash uloženy v /usr /bin a /bin složky. Například při každém spuštění příkazu bash vyhledá, zda v adresáři existuje nebo ne. Příkaz se spustí, pokud zjistí, že v adresářích else dává chybu.

Co takhle provést úkol, který ke spuštění v terminálu potřebuje více příkazů? V této konkrétní situaci vám může pomoci skriptování bash. Bash skriptování je forma shell skriptování, které vám umožňuje vytvářet programy pro spuštění více příkazů bash k provedení konkrétního úkolu.



Jaké jsou chyby ve skriptu bash:

Při práci se skriptováním bash nebo s jinými programovacími jazyky narazíte na mnoho chyb. Chyba je chyba nebo chyba v programu, která může způsobit, že se program chová nesprávně.

Každý programovací jazyk má svůj vlastní postup pro hledání chyb; podobně má bash také mnoho vestavěných možností pro ladění terminálového programu.

Správa chyb a ladění programu není nic menšího než potíže. Je to časově náročná práce a může se zhoršit, pokud neznáte správné nástroje pro ladění programu. Tento zápis je úplným průvodcem laděním skriptů bash, aby byl skript bez chyb. Začněme tedy:

Jak ladit bash skript:

Při práci na velkých programovacích projektech narazíte na mnoho chyb nebo chyb. Ladění programu může být někdy komplikované. Programátoři obvykle používají ladicí nástroje a mnoho editorů kódu také pomáhá při hledání chyb zvýrazněním syntaxe.

V Linuxu existují různé nástroje pro ladění kódů, například GNU Debugger aka gdb. Nástroje jako GDB jsou užitečné pro programovací jazyky, které se kompilují do binárních souborů. Jelikož je bash jednoduchým interpretovaným jazykem, není potřeba k jeho ladění používat těžké nástroje.

K ladění skriptovacího kódu bash existují různé tradiční techniky a jednou z nich je přidání Tvrzení. Tvrzení jsou podmínky, které jsou přidány do programů za účelem kontroly konkrétních podmínek a příslušného spuštění programu. Je to obranná technika, která pomáhá také při hledání chyb a testování. Můžete jich najít mnoho nástroje které pomáhají při přidávání tvrzení do bash skriptů.

Přidávání tvrzení je jednou ze starých tradičních technik. Pro ladění bash skriptu jsou v bashu k dispozici sady příznaků/možností. Tyto možnosti lze přidat společně se shebangem do skriptů nebo přidat při provádění programu v terminálu. Níže jsou uvedena témata, která se budeme zabývat:

  1. Jak ladit bash skript povolením podrobný -v volba
  2. Jak ladit bash skript pomocí xtrace -x volba
  3. Jak ladit bash skript pomocí noexec -n volba
  4. Jak identifikovat nenastavené proměnné při ladění bash skriptu
  5. Jak ladit soubor konkrétní část bash skriptu
  6. Jak ladit bash skript pomocí past příkaz
  7. Jak ladit bash skript odstraněním globalizace souborů za použití -F volba
  8. Jak kombajn možnosti ladění pro ladění skriptu prostředí
  9. Jak redirect debug-report do souboru

Podívejme se tedy na různé techniky v bashu k ladění bash skriptu:

1. Jak ladit bash skript povolením možnosti verbose -v:

Jedním z nejjednodušších přístupů k ladění skriptu bash je použití -proti možnost, známá také jako podrobná. Tuto možnost lze přidat pomocí shebangu nebo explicitně zadat název souboru skriptu při jeho provádění. Možnost verbose provede a vytiskne každý řádek kódu jako proces tlumočníka. Pojďme to pochopit pomocí příkladu bash skriptu:

#! /bin/bash
vyhodil 'Zadejte číslo1'
čístčíslo 1
vyhodil 'Zadejte číslo2'
čístčíslo 2
-li [ '$ číslo1' -gt '$ number2' ]
pak
vyhodil „Číslo1 je větší než číslo2“
elif [ '$ číslo1' -ekv '$ number2' ]
pak
vyhodil „Číslo1 se rovná číslu 2“
jiný
vyhodil „Číslo2 je větší než číslo1“
být

Výše uvedený kód získává od uživatele dvě čísla a poté provádí některé podmíněné příkazy, aby zkontroloval, zda je číslo významnější, menší nebo rovno druhému zadanému číslu. Ačkoli pro skriptování bash lze použít jakýkoli textový editor, používám editor Vim. Vim je výkonný editor bohatý na funkce, který zdůrazňuje syntaxi bash skriptů a snižuje pravděpodobnost chyb syntaxe. Pokud editor Vim nemáte, získejte jej spuštěním níže uvedeného příkazu:

$sudovýstižnýNainstalujte přišel jsem

Vytvořte soubor skriptu bash pomocí:

$přišel jsemb_script.sh

Pokud jste v editoru Vim noví, doporučuji vám se naučit jak používat editor vim než budete pokračovat.

Nyní zpět ke skriptu spusťte skript pomocí -proti volba:

$bash -protib_script.sh

Na výše uvedeném výstupu je vidět, že každý řádek skriptu je při zpracování tlumočníkem vytištěn v terminálu. Všimněte si, že skript přestane přijímat vstup od uživatele a poté zpracuje další řádek skriptu. Jak bylo uvedeno výše, že -proti možnost lze umístit za shebang, jak ukazuje následující:

#! / bin / bash -v

Podobně lze do dalšího řádku shebangu přidat podrobný příznak také pomocí soubor příkaz:

#! /bin/bash
soubor -proti

Kteroukoli z výše popsaných metod lze povolit podrobně.

2 Jak ladit bash skript pomocí volby xtrace -x:

Trasování spouštění, také známé jako xtrace, je chytrá a užitečná možnost ladění, zejména ke sledování logických chyb. Logické chyby jsou obvykle spojeny s proměnnými a příkazy. Ke kontrole stavu proměnné během provádění skriptu používáme -X volba. Nyní znovu spusťte soubor b_script.sh soubor s příponou -X vlajka:

$bash -Xb_script.sh

Výstup během procesu provádění explicitně ukazuje hodnotu každé proměnné. Znovu -X lze použít vedle shebangu a za linkou shebangu pomocí příkazu set. Xtrace vloží znaménko + na každý řádek skriptu.

3 Jak ladit bash skript pomocí volby noexec -n:

Chyby syntaxe jsou jednou z hlavních příčin chyb. K syntaktickému ladění bash skriptu používáme noexec (bez provedení) režimu. Volba použitá pro režim noexec je -n. Místo provádění se zobrazí pouze chyby syntaxe kódu. Mnohem bezpečnější přístup k ladění kódu. Provedeme b_script.sh opět s -n volba:

$bash -nb_script.sh

Pokud nedojde k chybě syntaxe, nedojde k provedení kódu. Nyní upravme náš kód:

#! /bin/bash

vyhodil 'Zadejte číslo1'
čístčíslo 1
vyhodil 'Zadejte číslo2'
čístčíslo 2
-li [ '$ číslo1' -gt '$ number2' ]
pak
vyhodil „Číslo1 je větší než číslo2“
elif [ '$ číslo1' -ekv '$ number2' ]
#pak
vyhodil „Číslo1 se rovná číslu 2“
jiný
vyhodil „Číslo2 je větší než číslo1“
být

Komentuji pak po elif . Nyní spusťte -n b_script.sh skript:

$bash -nb_script.sh

Podle očekávání chybu jasně identifikoval a zobrazil v terminálu.

4 Jak identifikovat nenastavené proměnné při ladění bash skriptu:

Dělat překlep při psaní kódu je běžné. Často zadáte nesprávnou proměnnou, která kód nenechá spustit. K identifikaci takové chyby používáme -u volba. Pojďme znovu upravit kód:

#! /bin/bash
vyhodil 'Zadejte číslo1'
čístčíslo 1
vyhodil 'Zadejte číslo2'
čístčíslo 2
-li [ '$ num1' -gt '$ number2' ]
pak
vyhodil „Číslo1 je větší než číslo2“
elif [ '$ číslo1' -ekv '$ number2' ]
pak
vyhodil „Číslo1 se rovná číslu 2“
jiný
vyhodil „Číslo2 je větší než číslo1“
být

Zaprvé -li podmíněné prohlášení, přejmenoval jsem číslo 1 variabilní na číslo 1 . Nyní číslo 1 je nenastavená proměnná. Nyní spusťte skript:

$bash -ub_script.sh

Výstup identifikoval a explicitně zobrazuje název nenastavené proměnné.

5. Jak ladit konkrétní část bash skriptu:

Režim xtrace zpracovává každý řádek kódu a poskytuje výstup. Hledání chyb ve velkém kódu by však bylo časově náročné, pokud již víme, která část potenciálně chybu způsobuje. Naštěstí xtrace také umožňuje ladit konkrétní část kódu, což lze provést pomocí soubor příkaz. Místo sada -x na začátku části, kterou je třeba odladit, a poté nastavit +x na konci. Například chci ladit podmíněné příkazy b_script.sh , takže připojím všechna podmíněná prohlášení v sada -x a nastavit +x možnosti uvedené v níže uvedeném kódu:

#! /bin/bash
vyhodil 'Zadejte číslo1'
čístčíslo 1
vyhodil 'Zadejte číslo2'
čístčíslo 2
soubor -X
-li [ '$ číslo' -gt '$ number2' ]
pak
vyhodil „Číslo1 je větší než číslo2“
elif [ '$ číslo1' -ekv '$ number2' ]
pak
vyhodil „Číslo1 se rovná číslu 2“
jiný
vyhodil „Číslo2 je větší než číslo1“
být
soubor+ x

Nyní spusťte skript pomocí bash b_script.sh .

Výstupem je pouze ladění podmínek if, jak je uvedeno.

6. Jak ladit bash skript pomocí příkazu trap:

Pokud je váš skript komplikovaný, pak existují i ​​komplikovanější techniky pro ladění. Jedním z nich je past příkaz. The past příkaz zachytí signály a provede příkaz, když nastane konkrétní situace. Příkaz může být signál nebo funkce. Vytvořil jsem další skript pod názvem sum_script.sh :

#! /bin/bash
past 'echo' Řádek $ {LINENO}: První číslo je $ number1, druhé číslo je $ number2 a součet je $ sum ''LADIT
vyhodil 'Zadejte první číslo'
čístčíslo 1
vyhodil „Zadejte druhé číslo“
čístčíslo 2
součet= $[číslo1 + číslo2]
vyhodil 'součet je$ součet'

The past příkaz pomocí LADIT signál zobrazuje stav proměnných číslo 1 , číslo 2 a součet po provedení každého řádku, jak ukazuje následující výstupní obrázek:

Žluté bloky jsou prázdná místa, protože uživatel dosud nezadal žádný vstup; tyto mezery se zaplní, když uživatel zadá hodnoty. Tato metoda je také velmi užitečná při ladění bash skriptů.

7. Jak odladit bash skript odstraněním globbingu souborů pomocí volby -f:

Globbování souborů je proces hledání souborů se zástupnými znaky, tj. * a ? . V mnoha situacích nemusíte při ladění soubory rozšiřovat. V takových případech můžete blokování souboru zablokovat pomocí -F volba. Pojďme to pochopit skriptem fglobe_script.sh :

#! /bin/bash
vyhodil 'Zobrazit všechny textové soubory.'
ls *.txt

Výše uvedený kód zobrazí všechny textové soubory v aktuálním adresáři, proveďte:

$bashfglobe_script.sh

Globbování souborů vypnete pomocí -F volba:

$bash -Ffglobe_script.sh

Podobně jej můžete použít s shebangem a s soubor také příkaz:

#! /bin/bash
vyhodil 'Zobrazit všechny textové soubory.'
ls *.txt
soubor -F
vyhodil 'Zobrazit všechny textové soubory'
ls *.txt
soubor+f

Nyní běžte bash fglobe_script.sh:

Část uzavřená s set -f/set +f options nezpracoval příkazy se zástupnými znaky.

8. Jak zkombinovat možnosti ladění pro ladění skriptu prostředí:

Ve výše uvedených technikách ladění používáme pouze jednu možnost, ale pro lepší porozumění můžeme různé možnosti kombinovat. Implementujme -X a -proti možnosti pro sum_script.sh skript. Používám sum_script.sh skript.

#! /bin/bash
vyhodil 'Zadejte první číslo'
čístčíslo 1
vyhodil „Zadejte druhé číslo“
čístčíslo 2
součet= $[číslo1 + číslo2]
vyhodil 'součet je$ součet'

Nyní proveďte:

$bash -xvsum_script.sh

Oba -X a -proti výstupy jsou kombinovány, jak je zobrazeno na výstupním obrázku. Podobně můžeme také kombinovat -u možnost s verbose -v pro detekci chyb. Nahrazuji číslo 1 proměnná s na jednom v šestém řádku skriptu:

#! /bin/bash
je$ number2asoučetje$ součet'' DEBUG
vyhodil '
Zadejte první číslo'
přečíst číslo 1
vyhodil '
Zadejte druhé číslo'
přečíst číslo 2
součet = $ [num + number2]
vyhodil '
thesoučetje$ součet'

Chcete-li zobrazit výstup, spusťte níže uvedený příkaz:

$bash -uvsum_script.sh

9. Jak přesměrovat zprávu o ladění do souboru:

Uložení zprávy o ladění skriptu bash do souboru může být užitečné v mnoha situacích. Je to trochu ošidné, protože přesměrovat zprávu o ladění do souboru; používáme některé speciální proměnné. Pojďme to implementovat b_script.sh kód:

#! /bin/bash
vykon 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
vyhodil 'Zadejte číslo1'
čístčíslo 1
vyhodil 'Zadejte číslo2'
čístčíslo 2
-li [ '$ číslo' -gt '$ number2' ]
pak
vyhodil „Číslo1 je větší než číslo2“
elif [ '$ číslo1' -ekv '$ number2' ]
pak
vyhodil „Číslo1 se rovná číslu 2“
jiný
vyhodil „Číslo2 je větší než číslo1“
být

Na druhém řádku kódu je vidět, že přesměrujeme výstup na a debug_report.log soubor pomocí souboru vykon příkaz s deskriptorem souboru 5 (FD5).

exec 5> debug_report.log: The vykon příkaz přesměruje vše, co se děje v prostředí, do souboru debug_report.log.

BASH_XTRACEFD = 5: To je a konkrétní bash proměnná a nelze je použít v žádném jiném prostředí. Je třeba mu přiřadit platný deskriptor souboru a bash zapíše extrahovaný výstup do debug_report.log.

PS4 = ‘$ LINENO– ‘: Je to také proměnná bash, která se používá k tisku čísla řádku při ladění pomocí režimu xtrace. Výchozí hodnota PS4 je + podepsat

Výše uvedený skript generuje soubor protokolu s názvem debug_report.log, Chcete -li si jej přečíst, použijte kočka příkaz:

Závěr:

Kód plný chyb může ovlivnit výkon programu a poškodit také hardware. Ladění je pro každý program velmi důležité, protože činí program efektivnější. Hledání stávajících a potenciálních chyb během vývoje programu může zabránit neočekávanému chování vašeho programu. Velké kódy obvykle vyžadují aktivní ladění, což zvyšuje účinnost kódu tím, že eliminuje použití náročné části kódu.

Mnoho programovacích jazyků a prostředí má své vlastní doprovodné ladicí programy. V bash skriptování lze implementovat různé techniky pro ladění skriptu. Tato příručka se důkladně zaměřila na všechny metody, které lze použít k nalezení chyb v bash skriptech. Kdykoli tedy máte pocit, že se váš bash skript nechová podle očekávání, použijte některou z výše uvedených technik, ale režim xtrace (-x) je ve většině případů velmi užitečný.