Bevált módszerek a Shell szkript létrehozására GNU / Linux rendszerben

Általában, amikor elkezd dolgozni a Szerverek adminisztrációs területe GNU / Linux és / vagy Unix operációs rendszerekkel, az ember egy olyan környezetben dolgozik (arcok), ahol általában van egy egy csomó ütemezett feladatot, amelyeket más adminok írtak és hogy valamikor meg kell kezelni (adminisztrálni) mert bármilyen problémát megoldani, javítani és / vagy kiküszöbölni, hogy megfeleljen az intézmény új követelményének ahol dolgozik. Tehát nem csoda, hogy bármilyen új SysAdmin Bármely munkahelyen nehézkes feladattal kell szembesülnie, hogy megértse a Shell szkript mások által létrehozott az öreg SysAdmin, amelyek nincsenek jól megírva, vagy logikai vagy írási struktúrában vannak, nem könnyen érthetőek, vagy a legrosszabb esetben parancsparancsokkal, atipikusak, régiek, nem hatékonyak, vagy kínos és zavaros módon vannak megírva.

Shell Scripting

míg rosszul írt forgatókönyvek megoldása mindig pillanatnyi bosszúság, ez bárkit megtanít jó SysAdmin valami fontos. Ha valaki létrehozni fog egy Shell szkript mindig jobb, mint ma nagyon profi és szabványosított módon írd meg őket, így az idő múlásával bárki más, vagy saját maga is megteheti a minimális erőfeszítés és tudás érheti el a megértést és az adminisztrációt minimális idő alatt.

Ezért a gyakorlati kiadványsorozat után "Ismerje meg a Shell szkripteket" ahol néhány nagyon praktikus szkriptet vizsgálunk egyszerű és alapvető parancsokkal, ezzel az új sorozattal kezdjük "Shell szkript létrehozásának bevált módszerei GNU / Linux rendszerben", ahol alaposan összpontosítunk minden egyes szempontjára és sok minden okára, vagyis áttekintünk néhány tippet, amelyek jobb forgatókönyvek készítésére késztetnek minket, de nem annyira magunknak, hanem a következő embernek (SysAdmin), kezelnie kell őket. Tehát nem kell elvégeznie azt az unalmas és nehéz feladatot, hogy kiderítse, mit kódolok, hogyan és miért, és miért nem működik tovább.

Ebben első (1.) poszt ennek az új sorozatnak "Bevált módszerek a jó Shell szkripthez GNU / Linux számára" Beszélni fogunk arról, hogy mi megy vagy kell mennie a Shell Script fejléc.

=======================================
FEJEZET - A Kagyló felhívása
=======================================

#! / path / interpret [paraméter-argumentum]

A legfelső sor az az alapstruktúra, amellyel a Shell Script for GNU / Linux meghívásra kerül. Elemei a következőképpen írhatók le:

#! => sha-bang

A sha-bang (#!) A létrehozott vagy létrehozandó Script tetején található a parancsfájl, amely elmondja az operációs rendszerünknek, hogy a fájlunk egy parancsok halmaza, amelyet az utána feltüntetett parancsértelmező betáplál (értelmezni fog). A karakterpár #! valójában ez egy mágikus szám kétbájtos, egy speciális jelző, amely jelöljön ki egy fájltípust, és a mi esetünkben egy futtatható shell szkript. Közvetlenül a sha-bang után jön a neve az útvonal, ahol a végrehajtandó tolmács található, valamint az említett tolmács neve. Más szavakkal, ez az út vezet a programhoz, amely értelmezi a parancsfájl parancsait, legyen az tolmács, programozási nyelv vagy segédprogram. Ez a héj majd végrehajtja a parancsokat a szkriptben, kezdve a tetejétől (a sor a sha-bang után), és figyelmen kívül hagyja az esetleges megjegyzéseket. Néhány sha bang Lehetnek:

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

A fent leírt sorok (például példaként) különböző héjat hívnak meg. A vonal / Bin / sh, hívja meg a héj alapértelmezés szerint (Bash GNU / Linux operációs rendszeren) vagy más hasonló. Használata #! / Bin / sh, az alapértelmezett értéke Bourne shell A UNIX alapú operációs rendszerek legtöbb kereskedelmi változatában létrehozza a Scriptet hordozható más operációs rendszerekre, amelyek nem megfelelően Linux, de hasonló, vagy ezen vagy UNIX-on alapul, bár ez feláldozza a BASH sajátos jellemzőit. Azonban a sorrend "#! / Bin / sh" megfelel a normának POSIX sh szabvány.

Megjegyezzük, hogy a sha-bangban megadott útnak helyesnek kell lennie, egyébként hibaüzenet, általában "A parancs nem található", ez lesz a szkript végrehajtásának egyetlen eredménye. Emlékezz a karakterpárra »#! « elhagyható, ha a szkript csak általános operációs rendszer parancsokból áll, vagyis a belső Shell-irányelvek használata nélkül. És ezt még egyszer ne feledje »#! / Bin / sh« meghívja az alapértelmezett shell tolmácsot, amely alapértelmezés szerint »#! / Bin / bash« egy csapatban vele GNU / Linux operációs rendszer.

Az érveket illetően több is használható, de a leggyakoribb: »-E«. ami elkészíti a forgatókönyvet ellenőrizze bármely parancs végrehajtási hibáito (végrehajtási sor), és ha pozitív, kényszeríti a megállót és a kilépést, egy tipikus az »-F« mert jelezze, melyik szkriptet töltse be és az egyik legritkább az »-Rm« amely végrehajtásának befejezése után végrehajtja annak törlését. Csak a sha bang egészen egyetlen argumentum (paraméter) a futtatandó program neve után.

És végül mondja el a forgatókönyvet a kód lényeges részeiben használt globális változók, többek között az események, például a végrehajtási útvonal, az engedélyezett felhasználó, a szkript neve ellenőrzéséhez. És fejezd be a többek között a program, az alkotó, a szervezet adatai, valamint a programra vonatkozó licencek.

Tanácsom (bevált módszerek) hogy a legjobb sha-bang és a címsor Shell szkript hang:

#! / usr / bin / env bash

Miért használja a parancsot »Env« Jelöljük az operációs rendszernek azt a tolmácsot, amelyet alapértelmezés szerint a benne megadott pontos útvonallal kell használni, amely lehetővé teszi számunkra sha bang ami növeli a hordozhatóságát, mert nem mindenben OS GNU / Linux tolmácsok vagy programok ugyanazon az úton járnak. És érvek nélkül, mert ehhez jobb használni a parancsot készlet, mert vele tudunk általános (-e) vagy specifikus (+ x / -x) hibák ellenőrzése, vagy a világos globális előre beállított beállítások a környezeti (-i) vagy specifikus (-u / –unset) változók számára. És végül, hogy specifikus (- o) kiegészítő tevékenységek végrehajtása a forgatókönyv belsejében.

Tehát az én ajánlott FEJLESZTEM

#! / usr / bin / env bash
# Jelölje a bash tolmácsot az abszolút elérési útdal operációs rendszerenként.

set -o emelt
# A parancsfájl leállítása és leállítása, ha a parancs vagy a végrehajtási sor sikertelen.

set -o főnév
# A parancsfájl leállítása és bezárása, amikor a parancsfájl nem bejelentett változókat próbál használni.

set -o pipefail
# A legutóbbi, nullától eltérő kilépési kódot visszaadó megrendelés kilépési állapotának lekérése

# set -o xtrace
# Nyomon követni, hogy mi fut. Hasznos a hibakereséshez. Engedélyezze, hogy csak hibákat ellenőrizzen.

Ne felejtsd el ezeket az ajánlásokat kiegészíteni:

01.- Indente a kódot: Nagyon fontos, hogy olvashatóvá tegye a kódját, és ezt látszólag sokan el is felejtik. Próbáld meg megtenni a szükséges mélyedéseket, hogy egy jó logikai struktúrát észleljünk.

02. - Helyezzen el szünetet a kódrészek között: Ez elősegítheti a kód sokkal érthetőbbé tételét, mivel a modulok vagy szakaszok közötti távolság lehetővé teszi, hogy a kód olvasható és könnyen érthető legyen.

03. - Kommentelje a kódot: Az egyes parancssorrendek (végrehajtási sorok) vagy kódrészek tetejére (vagy aljára) ideális hozzáadni a szkript (ek) funkcióinak leírását, hogy elmagyarázza, mi történik magában a kódban.

04. - Hozzon létre változókat a funkcióik leíró nevével: Rendeljen leíró változóneveket, amelyek nyilvánvalóan azonosítják azt a funkciót, amelyhez létrejön. Még ha ideiglenes változókat is létrehoz, amelyeket soha nem használnak egyetlen kódblokkon kívül, akkor is jó olyan nevet elhelyezni, amely implicit módon (objektíven) megmagyarázza, hogy milyen értékeket vagy funkciókat kezel.

05.- Használja a VARIABLE = $ (parancs) szintaxist a parancs cseréjéhez: Ha olyan változót akar létrehozni, amelynek értéke egy másik parancsból származik, akkor kétféleképpen teheti meg a bash-ban. Val vel visszalépés, vagyis a karakterekkel " , Például: VARIABLE = `parancs-opciók paraméterei ', de már elavult, tehát a szintaxis VÁLTOZÓ = $ (parancs) ez a legmodernebb, elfogadott és ajánlott módszer. NEM -> DÁTUM = "dátum +% F" / IGEN -> DÁTUM = $ (dátum +% F)

06.- Használjon Superuser és Authorized User Validation modulokat és / vagy változókat jelszóval vagy anélkül: Szükség esetén a biztonsági szint növelése.

07.- Használjon modulokat és / vagy változókat az operációs rendszer validálásához (Distro, Version, Architecture): a nem megfelelő platformokon történő használat megakadályozása érdekében.

08.- Modulokkal (eljárások / szakaszok) erősítse meg a kritikus vagy kötegelt műveletek végrehajtását (modulok / funkciók): Az improvizáció vagy gondatlanság miatti hibák minimalizálása.

09.- Felhasználóbarát interfészek biztosítása (felhasználóbarát): Terminál szerint menükkel és színekkel Párbeszéd és Grafikus interfészek az alapfelhasználók számára a Zenity, Gxmessage szolgáltatással. És ha lehetséges, használja a hangjelzések támogatását, amelyek a hang alapján azonosítják a felismerhető eseményeket. A lehető legtöbbet próbáltam, amire a Szkripted képes mindkét irányban működik, csak az opciók / modulok / funkciók engedélyezésével és letiltásával.

10.- Tartalmazza az üdvözlő és a búcsú modulokat (üzenetek): abban az esetben, ha szükséges a felhasználóval való interaktivitás növelése.

11. - Tartson be egy kettős végrehajtás-ellenőrző modult: Hozzon létre hozzá egy zárfájlt, hogy megakadályozza annak egyszerre több végrehajtását.

12.- Racionalizálja a szkript méretét külső funkciókkal és / vagy modulokkal: Ha a szkript nagyon nagy, ossza meg a kódot függvények segítségével, vagy ossza szét kis szkriptekké, amelyeket egy fő segítségével hívnak meg.

13. - A Scripten belüli többi tolmácshoz (programozási nyelvhez) intézett hívások világos és egyértelmű módon történő meghívása: Hívja meg őket világosan vonalak vagy modulok segítségével.

Példa:

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

A későbbi publikációkban a fent leírt gyakorlatok mindegyikét részletesebben kibővítjük.

És ha ismer néhány más jó gyakorlatot, a sajátját vagy másokat, ne habozzon kommentálni őket, hogy teljesebb összeállítást készítsen!

Az új sorozat következő kiadásáig.


6 hozzászólás, hagyd a tiedet

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Max j ​​rodriguez dijo

    Csak egy részlet, ez a "shebang" 😛
    nagyon jó bejegyzés, a jó gyakorlatok hosszú távon mindig segítenek a szabványosításban.

  2.   Olyat, ami itt elhaladt dijo

    A Bash nem az alapértelmezett shell az összes disztribúcióban, ezért a / bin / sh szimbolikus link nem mindig mutat a bash-ra. Például a Debianban (és ezért feltételezem, hogy Ubuntu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 gyökérgyökér 4 aza 8 2014 / bin / sh -> kötőjel
    Az alapértelmezett shell tehát a Debianon kötőjel. Lásd itt: https://wiki.debian.org/Shell

  3.   névtelen dijo

    Tippként a használatban lévő héj megismeréséhez:

    visszhang 0 dollár
    visszhang $ SHELL
    env | fogd meg a Kagylót

  4.   José Albert dijo

    Valóban igazad van! Kipróbáltam a DEBIAN 9-et és a Kali Linux 2.0-t, és ez igaz! elvisz téged. Még inkább: #! / Usr / bin / env bash ajánlása, ha ez a használni kívánt Shell.

    És teljesen igazad van, hogy ez a shebang, de néhány weboldalon (szakirodalom) shabangnak vagy más szóval hívják, ezért zavart. Példa:

    A számítás során a sebang az a karaktersor, amely a karakterek számjegyből és felkiáltójelből (#!) Áll a szkript elején. Sha-bangnak, [1] [2] hashbangnak, [3] [4] font-bangnak [5] vagy hash-plingnek is nevezik.

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

    Y 2. fejezet: Sha-Bang használatának megkezdése
    From: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   José Albert dijo

    Továbbá: basename $ 0