Najlepšie postupy na vytvorenie Shell Script v GNU / Linux

Spravidla, keď začnete pracovať na Oblasť správy serverov s operačnými systémami GNU / Linux a / alebo Unix, človek sa ocitne (pracuje) v prostredí, kde zvyčajne existuje a kopa naplánovaných úloh, ktoré napísali iní správcovia a to v určitom okamihu musíme spravovať (spravovať) pre vyriešiť akýkoľvek problém, vylepšiť a / alebo vylúčiť, splniť novú požiadavku inštitúcie kde pracuje. Takže to nie je čudné, že nejaké nové SysAdmin Na ktoromkoľvek pracovisku čelíte ťažkopádnej úlohe porozumieť niektorým z týchto problémov Shell skript vytvorené inými starý SysAdmin, ktoré nie sú dobre napísané alebo sú v logickej alebo písomnej štruktúre, nie sú ľahko pochopiteľné alebo v najhoršom prípade príkazovými príkazmi, sú atypické, staré, neefektívne alebo sú písané nepríjemne a neprehľadne.

Shell skriptovanie

zatiaľ čo riešenie zle napísaných skriptov je vždy chvíľková mrzutosť, toto každého naučí dobrý SysAdmin niečo dôležité. Ak sa niekto chystá vytvoriť Shell skript používať aj dnes, je vždy lepšie napíšte ich veľmi profesionálnym a štandardizovaným spôsobom, aby v priebehu času mohol ktokoľvek iný alebo sám seba používať minimálne úsilie a znalosti umožňujú porozumenie a správu v minimálnom čase.

Preto po praktickej sérii publikácií o „Learn Shell Scripting“ kde preskúmame niektoré veľmi praktické skripty s jednoduchými a základnými príkazmi, začneme touto novou sériou s názvom "Osvedčené postupy pre vytvorenie Shell Script v GNU / Linux", kde sa dôkladne zameriame na každú jeho malú stránku a na dôvody mnohých vecí, to znamená, že pokryjeme niekoľko tipov, vďaka ktorým dokážeme vytvárať lepšie skripty, ale nie tak pre seba, ale pre ďalšiu osobu (SysAdmin), ktorá musí spravovať ich. Takže nemusíte prejsť zdĺhavou a náročnou úlohou prísť na to, čo kódujem, ako a prečo a prečo to už nefunguje.

V tejto prvý (1.) príspevok tejto novej série „Najlepšie postupy pre dobrý skript Shell pre GNU / Linux“ Budeme hovoriť o tom, čo pôjde alebo má ísť do Hlavička Shell Script.

=======================================
Záhlavie - invokácia škrupiny
=======================================

#! / cesta / interpret [parameter-argument]

Horný riadok je základná štruktúra, s ktorou je vyvolaný Shell Script pre GNU / Linux. Jeho prvky možno opísať nasledovne:

#! => sha-bang

Sha-bang (#!) v hornej časti vytvoreného alebo pripravovaného skriptu je a skript, ktorý hovorí nášmu operačnému systému, že náš súbor je sada príkazov, ktoré budú podávané (budú interpretované) interpretom príkazov uvedeným za ním. Dvojica znakov #! v skutočnosti je to magické číslo dvojbajtový, špeciálny marker, ktorý určiť typ súboru, a v našom prípade, spustiteľný shell skript. Hneď po ša-bangu prichádza meno cesta, kde sa nachádza tlmočník, ktorý sa má vykonať, plus meno uvedeného tlmočníka. Inými slovami, toto je cesta k programu, ktorý interpretuje príkazy v skripte, či už ide o tlmočníka, programovací jazyk alebo obslužný program. Tento shell potom vykoná príkazy v skripte, počnúc hornou časťou (riadok za sha-bang) a ignoruje všetky komentáre. Niektoré ša-bang Patria medzi ne:

#! / Bin / sh
#! / Bin / bash
#! / Usr / bin / perl
#! / usr / bin / tcl
#! / bin / sed -f
#! / usr / awk -f

Každý z riadkov opísaných vyššie (ako príklad) vyvoláva iný shell. Čiara / Bin / sh, vyvolať škrupina v predvolenom nastavení (Bash v operačnom systéme GNU / Linux) alebo iné podobné. Použitím #! / Bin / sh, predvolená hodnota Bourne shell Vo väčšine komerčných variantov operačných systémov založených na UNIX vytvára Skript prenosné do iných operačných systémov, ktoré nie sú správne založené na systéme Linux, ale podobné alebo založené na ňom alebo systéme UNIX, aj keď to obetuje špecifické vlastnosti BASH. Avšak postupnosť „#! / Bin / sh“ vyhovuje norme POSIX sh štandard.

Všimnite si, že cesta uvedená v sha-bangu musí byť správna, inak zvyčajne chybové hlásenie "Príkaz nenájdený", bude to jediný výsledok vykonania skriptu. Pamätajte si dvojicu postáv »#! « možno ho vynechať, ak sa Skript skladá iba zo sady všeobecných príkazov operačného systému, to znamená bez použitia interných smerníc Shell. A nezabudnite ešte raz na to »#! / Bin / sh« vyvolá predvoleného interpreta prostredia, ktorý je predvolený »#! / Bin / bash« v tíme s ním Operačný systém GNU / Linux.

Pokiaľ ide o argumenty, je možné použiť niekoľko, ale najbežnejšie je: »-E«. ktorý robí scenár overiť chyby vykonania ktoréhokoľvek príkazuo (riadok vykonania) a ak je kladné, vynúti zastavenie a výstup, typický je »-F« pre označte, ktorý skript sa má načítať a jeden z najvzácnejších je »-Rm« ktorý vykoná jeho vymazanie po dokončení jeho vykonávania. Je možné určiť iba v ša-bang až do jeden argument (parameter) za názvom spusteného programu.

A nakoniec povedzte scenár globálne premenné, ktoré použijete v základných častiach vášho kódu, okrem iného na overenie udalostí, ako je napríklad cesta spustenia, oprávnený používateľ, názov skriptu. A skončiť s údaje programu, tvorcu, organizácie, okrem iného, ​​plus licencie, ktoré sa na program vzťahujú.

Moja rada (osvedčené postupy) zvoliť najlepší sha-bang a smer a Shell skript Sú to:

#! / usr / bin / env bash

Prečo používať príkaz »Env« Označíme operačnému systému tlmočníka, ktorý sa má použiť s presnou cestou, ktorá je v ňom predvolená, čo nám umožňuje mať a ša-bang čo zvyšuje jeho prenosnosť, pretože nie vo všetkých OS GNU / Linux tlmočníci alebo programy majú rovnakú cestu. A bez argumentov, pretože na to je lepšie použiť príkaz sada, pretože s ním môžeme overiť chyby, všeobecné (-e) alebo konkrétne (+ x / -x), alebo pre jasné globálne predvoľby pre prostredie (-i) alebo špecifické (-u / –unset) premenné. A nakoniec, aby vykonávať konkrétne (- o) doplňujúce činnosti vo vnútri scenára.

Moja odporúčaná hlavička by teda bola:

#! / usr / bin / env bash
# Označte tlmočník bash s absolútnou cestou podľa operačného systému.

nastaviť -o errexit
# Povedať skriptu, aby sa zastavil a zavrel, keď zlyhá príkaz alebo riadok vykonania.

množina -o podstatných mien
# Povedať skriptu, aby sa zastavil a zavrel, keď sa skript pokúsi použiť nedeklarované premenné.

nastaviť -o pipefail
# Získať stav ukončenia poslednej objednávky, ktorá vrátila nenulový ukončovací kód.

# set -o xtrace
# Ak chcete sledovať, čo beží. Užitočné na ladenie. Povoľte ju iba na kontrolu chýb.

Nezabudnite tiež dodržiavať tieto odporúčania:

01. - Zarážka kódu: Aby bol váš kód čitateľný, je veľmi dôležité a je to niečo, na čo zrejme veľa ľudí zabúda. Pokúste sa urobiť potrebné odsadenia, aby ste vnímali dobrú logickú štruktúru v dohľade.

02. - Pridajte medzery medzi sekcie kódu: To môže pomôcť urobiť kód oveľa zrozumiteľnejším, pretože medzery podľa modulov alebo sekcií umožňujú, aby bol kód čitateľný a ľahko pochopiteľný.

03. - Komentujte čo najviac ku kódu: V hornej časti (alebo dolnej časti) každého príkazového príkazu (riadok vykonania) alebo sekcie kódu je ideálne pridať popis funkcie skriptu (-ov), aby ste vysvetlili, čo sa deje v samotnom kóde.

04. - Vytvorte premenné s popisnými názvami ich funkcií: Priraďte popisné názvy premenných, ktoré zjavne identifikujú funkciu, pre ktorú sa vytvorí. Aj keď vytvárate dočasné premenné, ktoré sa nikdy nebudú používať mimo jeden blok kódu, je stále dobré dať názov, ktorý implicitne (objektívne) vysvetľuje, s akými hodnotami alebo funkciami narába.

05. - Na nahradenie príkazov použite syntax VARIABLE = $ (príkaz): Ak chcete vytvoriť premennú, ktorej hodnota je odvodená od iného príkazu, existujú dva spôsoby, ako to urobiť v bash. S spätná väzba, teda s postavami " , ejm: VARIABLE = `parametre príkazového riadku`, ale už je zastaraná, takže syntax PREMENNÁ = $ (príkaz) je to najmodernejší, akceptovaný a odporúčaný spôsob. NIE -> DATE = `dátum +% F` / ÁNO -> DATE = $ (dátum +% F)

06. - Používajte moduly a / alebo premenné s overením superužívateľa a autorizovaným používateľom alebo bez neho: V prípade potreby zvýšiť úroveň zabezpečenia.

07. - Používajte moduly alebo premenné overenia operačného systému (Distro, verzia, architektúra): zabrániť použitiu na nevhodných platformách.

08. - Použite moduly (postupy / sekcie) na potvrdenie vykonania kritických alebo dávkových akcií (moduly / funkcie): Minimalizovať chyby spôsobené improvizáciou alebo neopatrnosťou.

09. - Poskytujte užívateľsky prívetivé rozhrania (užívateľsky prívetivé): Terminálom s ponukami a farbami s Dialóg a Grafické rozhrania pre základných používateľov s programom Zenity, Gxmessage. A pokiaľ je to možné, využite podporu zvukových výstrah identifikujúcich rozpoznateľné udalosti podľa zvuku. Snažil som sa čo najviac, ako to váš skript dokáže pracovať oboma spôsobmi iba povolením a zakázaním možností / modulov / funkcií.

10. - Zahrňte moduly (správy) na privítanie a rozlúčku: v prípade potreby zvýšenia interaktivity s používateľom.

11. - Zahrňte modul na overenie dvojitého vykonania: Vytvorte preň zámkový súbor, aby ste zabránili jeho vykonaniu viac ako raz súčasne.

12. - Racionalizujte veľkosť skriptu pomocou externých funkcií a / alebo modulov: Ak je skript veľmi veľký, rozdeľte kód pomocou funkcií alebo ho rozdeľte na malé skripty, ktoré sa vyvolávajú pomocou hlavného.

13. - Vyvolanie jasným a zrejmým spôsobom volania na ďalších tlmočníkov (programovacie jazyky) v rámci Script: Jasne ich pozvite linkami alebo modulmi.

príklad:

# ================================================== #
#!/bin/bash
#Llamando a un interprete externo a BASH
echo 'El siguiente texto será mostrado por el interprete de PERL'
perl -e 'print "Este texto es mostrado por un script PERL embebido.\n";'
exit 0
# ==================================================#
# ==================================================# 
#!/bin/bash #Llamando al interprete de Python. 
echo 'El siguiente es un script de python:'
echo print "Hola, mundo!" | tee $HOME/.testpythonbash.py
python $HOME/.testpythonbash.py exit 0
# ==================================================#

# ======================================================= #
#!/bin/bash
# bash-y-perl.sh

echo "Saludos desde la parte BASH del script."
# Es posible añadir mas comandos BASH aqui.

exit 0
# Fin de la parte BASH del script.

###########################################################

#!/usr/bin/perl
# Esta parte del script se invoca con la opcion -x.

print "Saludos desde la parte PERL del script.\n";
# Podemos añadir mas comandos PERL aqui.

# Fin de la parte PERL del script.
# ======================================================= #
 

V budúcich publikáciách podrobnejšie rozvinieme každú z vyššie popísaných postupov.

A ak poznáte nejaké ďalšie osvedčené postupy, svoje vlastné alebo iné, neváhajte ich komentovať a vytvorte úplnejší prehľad!

Až do ďalšieho vydania tejto novej série.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   Max j ​​rodriguez dijo

    Iba jeden detail, je to „shebang“ 😛
    veľmi dobrý príspevok, osvedčené postupy z dlhodobého hľadiska vždy pomôžu štandardizovať.

  2.   Jeden, ktorý tadiaľ prechádzal dijo

    Bash nie je predvolený shell pre všetky distribúcie, a preto symbolický odkaz / bin / sh nemusí vždy smerovať na bash. Napríklad v Debiane (a predpokladám preto Ubuntu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 koreňový koreň 4 aza 8 2014 / bin / sh -> pomlčka
    Predvolený shell je preto v Debiane pomlčka. Pozri tu: https://wiki.debian.org/Shell

  3.   bezmenný dijo

    Ako tip na poznanie používaného prostredia Shell:

    ozvena $ 0
    echo $ SHELL
    poslať | grep SHELL

  4.   Ing.Jose Albert dijo

    Máte skutočne pravdu! Vyskúšal som na DEBIAN 9 a Kali Linux 2.0 a je to pravda! vezme ťa na pomlčku. Ešte viac odporúčanie: #! / Usr / bin / env bash, ak chcete použiť Shell.

    A máte úplnú pravdu, že je to shebang, ale na niektorých webových stránkach (technické literatúry) to nazývajú shabang alebo inými slovami, preto som zmätený. Príklad:

    Pri výpočte je shebang postupnosť znakov pozostávajúca zo znaku čísla a výkričníka (#!) Na začiatku skriptu. Nazýva sa tiež sha-bang, [1] [2] hashbang, [3] [4] pound-bang, [5] alebo hash-pling.

    z: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    Y Kapitola 2. Začíname so Sha-Bangom
    z: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Ing.Jose Albert dijo

    Tiež: basename $ 0