Bash Scripting: Průvodce vytvořením

Bash skriptovací skripty používají správci systému, programátoři, síťoví inženýři, akademici a prakticky každý, kdo pravidelně používá Linux /Unix. Bez ohledu na to, co uživatel dělá a jaké je jeho celkové zvládnutí počítačových dovedností, může najít správnou cestu k použití skriptu Bash. I když jsou správně, nazývají se shell-skripty, ale většina programátorů odkazuje na jejich Bash skripty. Jako interaktivní shell je krátkým jazykem pro iniciování a správu výpočtů. Jako skriptovací jazyk je jazyk specifický pro doménu, pro správu a uspořádání procesů a souborů.

Definice skriptu Bash

Bash skriptování - interpret příkazového jazyka. Je široce dostupný v různých operačních systémech a je standardním příkazem parser pro většinu systémů GNU /Linux. Toto je zkratka "Bourne Again Shell".


Další definice:
  • Shell je makroprocesor, který umožňuje provádět interaktivní nebo neinteraktivní provádění příkazů.
  • Skriptování umožňuje konfigurovat automatické provádění příkazů, které by jinak jinak jednají za sebou.
  • Bash skriptování je výchozí v mnoha systémech GNU /Linux, takže skript shell funguje i bez definování interpretace. Chcete-li zjistit, jaký výchozí příkaz běží, zadejte: $ echo $ SHELL /bin /bash. Existují další interpretace prostředí, jako je Korn, C a mnoho dalších. Z tohoto důvodu se doporučuje určitshell interpreter, který bude použit speciálně pro obsah skriptu.


    Nyní budou všechny skripty obsahovat definici shell interpretu: #! /Bin /bash. Konkrétněji je to napsáno v odborné příručce Bash Advanced Bash.

    Názvy souborů a oprávnění

    Pro spuštění skriptu prostředí musí být soubor spustitelný, provedený příkazem "chmod + x FILENAME". Ve výchozím nastavení nejsou žádné nově vytvořené soubory spuštěny bez ohledu na příponu přípony. Ve skutečnosti je nejnovější funkce v systémech GNU /Linux v zásadě žádný význam. Při spouštění příkazu "ls" pro výpis všech souborů a adresářů je okamžitě jasné, že soubor .sh je věrohodný shellový skript a ".jpg" bude komprimovaný obraz. Další informace o příponách v tomto jazyce naleznete v příručce Správa skriptů Advanced Bash. V systémech GNU /Linux lze příkaz identifikovat typ souboru. Jak je vidět z příkladu níže, přípona souboru nemá žádný význam a v tomto případě je tlumočník prostředí důležitější.
    Takže název shell skriptu "0_xyz" funguje dobře, i když se programátoři snaží vyhnout co nejvíce.

    Příkaz shell PATH

    Když vývojář zadá příkaz ve schránce, Bash se podívá na určité adresáře, aby zjistil, zda ho najde. Proto podle Bash skriptu průvodce, pokud zadáte "ls" ve shellu, bude spouštět pouze příkaz, pokud je ve své cestě. Operace skončí s chybou, pokud anonebude v jedné z adresářů, které jsou součástí trasy. Pokud existuje koincidence ve více než jednom adresáři na cestě, zvolí první. Trasu můžete najít spuštěním:
    echo $ PATH. /Home /jzb /bin:: /usr /local /bin: /usr /bin: Na obrazovce se něco takového objeví /bin: /usr /bin /X11: /usr /X11R6 /bin: /usr /hry: /usr /lib /jvm /jre /bin.

    Správná cesta k domovskému adresáři

    Každý adresář, ve kterém vypadá Bash, je oddělen dvojtečkou. V tomto případě, z nichž první bude kontrolovat katalogu «bin», pak /usr /local /bin, /usr /bin. Pokud je uživatel přihlášen jako root, by mělo vidět další sadu adresářů, včetně adresáře /usr /local /sbin, /usr /sbin. Můžete je přidat nebo upravovat úpravou souborů: ~ /.bashrc a ~ /.bash_profile. Například: PATH = "$ HOME /bin: $ PATH". Toto pravidlo můžete mírně změnit a nainstalovat pokročilé skripty Bash. PATH „=“ informuje Bash, bude to nastavit cestu a «$ HOME /bin» zve ho přidat do adresáře bin a potom «$ PATH» povzbuzuje ho přidat všechna data, která na trase. Parametr «:» je oddělovač mezi prvky. Vývojář uvidí něco podobného na obrazovce monitoru: pokud [-d "$ HOME /bin"]; pak PATH = "$ HOME /bin: $ PATH" fi. Toto pravidlo zkontroluje, zda adresář existuje «bin» v domovském adresáři a přidejte ji na cestě k více správně provádět operace «run Bash script».

    Řádek aliasu

    Alias ​​je řetězec, ve kterém bude Bash nahrazen jiným týmem. Jednoduchý příklad: alias ls = 'ls --color = auto'. Říká mu, že když spuštění «ls», musíte spustit «ls --color = auto», bez vytáčení zbytek. Na příkazovém řádku můžete nastavit aliasy a je to dobré pro testování.
    Dává to smyslnastavit aliasy na "~ /.bash_profile a ~ /.bashrc". Nebo vytvořit něco podobného «~ /.aliases» a volání z konfiguračních souborů následujícím způsobem: if [-f ~ /.bash_aliases]; pak ~ /.bash_aliases fi Chcete-li zobrazit již existující aliasy, spusťte ji do shellu. V distribuci je implicitně označen. Například výchozí nastavení je openSUSE 11.2 bez jakýchkoliv změn.
    Jako test, můžeme vidět, že už mají distribuci a snaží se, aby některé ze svých vlastních možností.

    Rozšíření pláště

    bash příkaz, se hodnotí a zadejte „roztahuje“ a další výrazy aliasů kdykoli je to nutné. Má několik znaků, které je vždy rozšiřuje splnit jeden nebo více znaků, a oni jsou voláni „zástupný znak“. Takové srovnání modelů může být opravdu užitečné. Například, pokud chcete vidět všechny JPEG soubory v adresáři, zahájí «ls * jpg», za předpokladu, že JPEG soubory označené jako «jpg», a Bash rozšíří ji tak, aby odpovídala jakýkoli název souboru, který končí jpg.

    Pokud potřebujete kombinovat pouze 1 znak, použijte "?". To bude ukazovat na jediné znamení, takže "ls?" .Jpg "bude odpovídat pouze názvům souborů, například" 1.jpg "nebo" a.jpg ", ne" 01.jpg ". Bash také umožňuje přizpůsobení rozsahů znaků pomocí závorek. Použití [abc12] bude odpovídat jedné z znaků v rozšíření. Takže práce s "ls-lh [abc12] .jpg" bude korelována s a.jpg, b.jpg, c.jpg, 1.jpg a 2.jpg, ale ne 12.jpg nebo abc.jpg. Můžete negovat vzor by předpona «třesku», například (!): Ls -lH [! Ab12] .jpgbude odpovídat c.jpg nebo 3.jpg, ale ne 2.jpg atd. Dalším vhodným trikem je rozšířit závorku, pokud jde o organizaci dokumentů podle let a dat. Pokud například adresář ~ /Documents má katalog 2010 s podadresáři od 01 do 12 a nemusí tisknout od 01 do 12, proveďte místo toho příkaz Bash: mkdir 2010 /{0112}. Když čte pravidlo, rozšiřuje to, co je v závorkách od 01 do 12. Pracuje také s písmeny, takže pokud potřebujete podadresáře prostřednictvím z, můžete spustit mkdir {az} a vytvoří adresáře prostřednictvím z. Může také pracovat s velkými písmeny.

    Spuštění skriptu

    Existuje alternativní způsob, jak spustit Bash skripty. Ve velmi zjednodušené podobě je jeho skript pouze textovým souborem obsahujícím pokyny, které musí být provedeny postupně od shora dolů. Jak jsou instrukce interpretovány závisí na konkrétní shebangu nebo způsobu, jakým je skript proveden.
    Další metodou pro implementaci skriptů je explicitně volat jeho interpret, například $ bash date.sh. Následně bude skript spuštěn bez nutnosti spustit shellový skript a bez oznámení šebang přímo ve schématu operačního systému volá spustitelný soubor binárního bash. Proto bude obsah souboru date.sh načten a interpretován jako Bash Shell Script.

    , relativní a absolutní cesta

    Před oficiálním programu script shell, například výjezd Bash skript, je nutné definovat navigaci s ním rozlišovat mezi relativní a absolutní cestu k souboru. Pravděpodobně nejlepší analogie, která vysvětluje relativní a absolutní cestu k souboruvizualizovat souborový systém GNU /Linux jako vícepodlažní budovu. Kořenový adresář je vstupní dveře budovy, označené polohou, poskytuje vstup do celého souborového systému "struktury", a tak poskytuje přístup k všem adresářům - "podlažím" a "místnostem" - a souborům - k "obyvatelům". Například jít do místnosti 1 ve 3. patře, nejprve musíte vstoupit do hlavních dveří a pak jít do 3. patra (úroveň 3) a pak vstoupit do místnosti (pokoj1). Takže absolutní cesta k této konkrétní místnosti na podlaze uvnitř budovy "/level3 /room1". Proto pokud chcete navštívit room2 také na úrovni 3, najděte nejdříve aktuální místo, kterým je pokoj 1, zadáním "/" a následně tím, že zadáte název pokojové místnosti "room2". To vede k relativní cestě k místnosti 2, což je v tomto případě "/room2". Vzhledem k tomu, že uživatel v tomto příkladu již byl ve třetí úrovni, nemusí opustit celou budovu a znovu absolvovat absolutní cestu hlavním vchodem /úrovní3 /místností2. Naštěstí má GNU /Linux jednoduchý kompasový nástroj, který pomáhá programátoru přesunovat souborový systém jako příkaz "pwd". Tento příkaz vždy vytiskne aktuální polohu při jeho spuštění. Následující příklad použije příkazy "cd" a "pwd" pro navigaci v systému souborů GNU /Linux pomocí absolutních a relativních cest.
    Další pokračování.
    Proveďte příkaz "cd" bez jakýchkoliv argumentů, abyste mohli okamžitě navigovat do domovského adresáře uživatele odkudkoli. Jak můžete vidět, navigace prostřednictvím souborového systému GNU /Linux je jednoduchá a zároveň velmi matoucítéma

    Pojmy proměnných

    Téměř každý programovací jazyk má koncept proměnných - symbolický název pro část paměti, která může být přiřazena hodnotám, číst a manipulovat s jejím obsahem. Například pro příklad Bash skriptu, Hello World lze provést pomocí proměnných. Všimněte si, že kolem znaménka "=" by neměly být žádné mezery:
  • VAR = hodnota funguje;
  • VAR = hodnota nefunguje.
  • V prvním případě shell vidí symbol "=" a zpracovává příkaz jako přiřazení proměnné. Ve druhém případě předpokládá, že VAR musí být jméno příkazu a pokusí se jej spustit. Zadejte následující kód v var.sh.
    Přiřazuje proměnnou "Hello World" proměnnou MY_MESSAGE. To vyžaduje uvozovky kolem řetězce Hello World a proměnná může obsahovat pouze jednu hodnotu, takže čára s mezerami by měla být zobrazena tak, aby shell věděl, že vše je považováno za jedno. V opačném případě se shell pokusí provést příkaz "Svět" po přiřazení "MY_MESSAGE = Dobrý den". Shell není náročný na typy proměnných, mohou ukládat řetězce, celá čísla, platná čísla - vše, co uživatel má rád. Zkušení programátoři dbá na skutečnost, že speciální znaky musí být řádně chráněny. To se provádí pomocí příkazu čtení, který čte řetězec ze standardního vstupu na přiloženou proměnnou. Pokud mu dáte celé jméno a nepoužíváte dvojité uvozovky příkazu "echo", zobrazí se stále správně. Většina jazyků má koncept smyček, pokud potřebujete opakovat úkol dvakrát, je nepravděpodobné, že uživatel chce zadat kód 20krát, a pravděpodobně,s chybami Za tímto účelem existují smyčky "pro" a "while" v shellu Bourne. To dává poněkud méně možností než jiné jazyky, ale nikdo netvrdí, že programování skořápky má sílu C. For-loop se opakuje přes množinu hodnot, dokud se seznam nevyčerpá, hodnoty ghb 'njv mohou být libovolné.

    První skript

    U prvního shellu skriptu můžete jednoduše napsat skript, který říká "Dobrý svět". Vytvořte soubor (first.sh) následujícím způsobem: first.sh První řádek říká Unixu, že soubor musí být spuštěn /bin /sh. Jedná se o standardní uspořádání shellu pro téměř každý Unix systém. Používáte-li skript Linux Bash, GNU /Linux /bin /sh je obvykle symbolický odkaz na bash, nebo pomlčka se stává běžnějším. Druhý řádek začíná zvláštním znakem "#". Označuje řádku jako komentář, je to zcela ignorováno. Jedinou výjimkou je, když začne první řádek souboru "#!". Jedná se o zvláštní směrnici, kterou Unix zvládá a znamená, že i když používá "csh", "ksh" nebo něco jiného jako interaktivní shell, pak je Bourne dále interpretuje. Podobně Perl může začínat řetězcem: #! /Usr /bin /perl To řekne interaktivnímu shellu, že následující příkaz by měl být spuštěn perl. Následující pravidla se běžně používají pro programování shellu Bourne: #! /Bin /sh. Třetí řádek provede příkaz "echo" se dvěma parametry nebo argumenty: první je "Hello"; Druhá je "Svět". Věnujte pozornost tomu, že "echo" automaticky nastaví jeden prostor mezi jeho parametry. Symbol stále zaznamenává # komentář a všeNásledující položky jsou shell ignorovány.

    Zkouška testu scénáře

    ​​Test se používá prakticky pro každý psaný skript shellu. Tento „test“ se neříká tak přímo, často za použití notace „[“. Online javljaetsja symvolycheskoy odkazem эtoho slov Avto Set Program shell více než chytaemыmy.Obыchno Tento oznachaet, něco velmi shell Bash skript bude ynterpretyrovatsya "[" Jak znamenat "test", i když středu Unix nastroena jinak. To oznachaet že «[“ opravdu tento program, jak ‚ls‘, a jiní, proto IIa dolzhna bыt obklopené bílými znaky: if [$ foo = ‚bar‘] nebude fungovat, protože je interpretován jako: je-li zkouška $ foo = "bar"], což je "]" bez počátku "[" .V této sluchae pomeschayut probelы Around vseh operátorů a vыdelyayut obyazatelnыe slovo "prostor", zamenyaya ego faktycheskoe prostranstva, jinak Pokud není pomsta, to není srabotaet: Je-li prostor [SPACE "$ foo" SPACE = SPACE "bar" SPACE] Některé přijmout membránu "==" pro porovnávání řetězců. Pro druhé je nejlepší použít pro čísla celá čísla "" nebo "-eq". Jak můžete vidět, test je jednoduchý, ale výkonný srovnávací nástroj, který je nezbytný pro fungování shellu. Samozřejmě, že vše nebude pozdě guru-Bash čtení článku, ale bude jistější a vyzbrojeni potřebnými znalostmi a dovednostmi, aby snadno vykonávat svou práci.

    Související publikace