Parimad tavad Shelli skripti loomiseks GNU / Linuxis

Tavaliselt siis, kui hakkate Serverite haldusala GNU / Linuxi ja / või Unixi operatsioonisüsteemidega, satub (nägu) töötama keskkonda, kus tavaliselt on a hunnik ajastatud ülesandeid, mida teised administraatorid kirjutasid ja et mingil hetkel peame haldama (haldama) para lahendada mis tahes probleem, parandada ja / või kõrvaldada, et täita asutuse uus nõue kus ta töötab. Nii pole kummaline, et mõni uus SysAdmin Igal töökohal seisate silmitsi tülika ülesandega mõista mõnda neist Shelli skript teiste loodud vana SysAdmin, mis pole hästi kirjutatud või on loogilises või kirjutusstruktuuris, neid pole kerge mõista või halvimal juhul käsukäskudega, ebatüüpilised, vanad, ebaefektiivsed või ebamugaval ja segasel viisil kirjutatud.

Shelli skriptimine

kuigi halvasti kirjutatud skriptide lahendamine on alati hetkeline tüütus, see õpetab kedagi hea SysAdmin midagi olulist. Kui kavatsetakse luua a Shelli skript kasutada tänasest kauem, on alati parem kirjutage need väga professionaalselt ja standardiseeritud viisil, et aja jooksul saaksid keegi teine ​​või tema ise minimaalsed jõupingutused ja teadmised saavutavad mõistmise ja asjaajamise minimaalse aja jooksul.

Seetõttu pärast praktilisi publikatsioonide sarju teemal "Shelli skriptimise õppimine" kus uurime mõningaid väga praktilisi skripte lihtsate ja põhiliste käskudega, alustame sellest uuest seeriast "Shelli skripti loomise parimad tavad GNU / Linuxis", kus keskendume põhjalikult selle igale väiksemale aspektile ja paljude asjade põhjustele, see tähendab, et käsitleme mõningaid näpunäiteid, mis panevad meid paremaid skripte tegema, kuid mitte nii enda, vaid järgmise inimese jaoks (SysAdmin), kes peab neid hallata. Nii et te ei pea läbima tüütut ja rasket ülesannet, et aru saada, mida ma kodeerin, kuidas ja miks ja miks see enam ei toimi.

Sel esimene (1.) postitus selle uue sarja "Hea tava GNU / Linuxi Shelli skripti jaoks" Me räägime sellest, mis läheb või peaks minema Shell Scripti päis.

=======================================
PEAD - KOORA KUTSUMINE
=======================================

#! / path / interpret [parameeter-argument]

Ülemine rida on põhistruktuur, millega kutsutakse GNU / Linuxi Shelli skripti. Selle elemente võib kirjeldada järgmiselt:

#! => sha-pauk

Sha-bang (#!) Loodud või loodava skripti ülaosas on skript, mis ütleb meie operatsioonisüsteemile, et meie fail on käskude kogum, mida toidab (tõlgendab) selle järel märgitud käsutõlk. Tegelaspaar #! tegelikult on see a maagiline number kahebaidine, spetsiaalne marker, mis määrake failitüüpja meie puhul käivitatav shelliskript. Kohe pärast sha-pauku tuleb nimi tee, kus täidetav tõlk asub, koos nimetatud tõlgi nimega. Teisisõnu, see on tee programmi juurde, mis tõlgendab skriptis olevaid käske, olgu see siis tõlk, programmeerimiskeel või utiliit. Seejärel täidab see kest skripti käsud, alustades ülaosast (rida pärast sha-bangi) ja ignoreerides kõiki kommentaare. Mõned sha-pauk Need võivad olla:

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

Kõik ülalkirjeldatud read (näiteks) kutsuvad erinevat kestat. Rida / Bin / sh, kutsuge koor vaikimisi (Bash GNU / Linuxi operatsioonisüsteemis) vms. Kasutamine # / Bin / sh, vaikeväärtus Bourne'i kest Enamikus UNIX-põhiste operatsioonisüsteemide kommertsvariantides muudab see skripti loodud kaasaskantav teistesse opsüsteemidesse, mis pole korralikult Linux, kuid sarnane või põhineb sellel või UNIXil, ehkki see ohverdab BASH-i eripära. Kuid järjestus "#! / Prügikast / sh" vastab normile POSIX sh standard.

Pange tähele, et sha-bangis antud tee peab olema õige, muidu tavaliselt veateade "Käsklust ei leitud", see on skripti täitmise ainus tulemus. Pidage meeles tegelaspaari »#! « selle võib ära jätta, kui skript koosneb ainult operatsioonisüsteemi üldiste käskude komplektist, st ilma Shelli sisedirekti kasutamata. Ja pidage seda veel kord meeles »#! / Prügikast / sh« kutsub vaikimisi shellitõlki, mis vaikimisi on »#! / Prügikast / bash« temaga meeskonnas GNU / Linuxi operatsioonisüsteem.

Argumentide osas võib kasutada mitmeid, kuid kõige tavalisem on: »-E«. mis teeb stsenaariumi kontrollida mis tahes käsu täitmisviguo (täitmisjoon) ja kui see on positiivne, sunnib peatuma ja väljuma, tüüpiline on »-F« para märkige, milline skript laadida ja üks haruldasemaid on »-Rm« kustutab selle pärast selle täitmise lõpetamist. Täpsustada on võimalik ainult sha-pauk kuni a üks argument (parameeter) käivitatava programmi nime järel.

Ja lõpuks rääkige stsenaarium globaalsed muutujad, mida kasutate oma koodi olulistes osades, muu hulgas sündmuste, näiteks käivitamistee, volitatud kasutaja, skripti nimi, valideerimiseks. Ja lõpetage muu hulgas programmi, looja, organisatsiooni andmed, pluss programmile kehtivad litsentsid.

Minu nõuanded (parimad tavad) valida parim sha-bang ja rubriik a Shelli skript Heli:

#! / usr / bin / env bash

Miks käsku kasutada »Env« Me näitame operatsioonisüsteemile kasutatavat tõlki koos vaikimisi selles määratud täpse teega, mis võimaldab meil sha-pauk see suurendab selle teisaldatavust, sest mitte kõigis OS GNU / Linux tõlkidel või programmidel on sama tee. Ja ilma argumentideta, sest selleks on parem kasutada käsku komplekt, sest temaga saame valide valideerimine, üldine (-e) või spetsiifiline (+ x / -x), või keskkonna (-i) või konkreetsete (-u / –unset) muutujate globaalsed eelseadistused. Ja lõpuks, et viia ellu konkreetseid (- o) täiendavaid meetmeid skripti sees.

Nii et minu soovitatav HEADER oleks:

#! / usr / bin / env bash
# Märkige bash-tõlk absoluutse teega operatsioonisüsteemi järgi.

sead -o errexit
# Käsu või täitmisrea nurjumisel käsk skriptil peatuda ja sulgeda.

set -o nimisõna
# Käsk skriptil peatuda ja sulgeda, kui skript üritab deklareerimata muutujaid kasutada.

seada -o torustik
# Viimase tellimuse, mis tagastas nullist väljumise koodi, väljumisoleku saamiseks.

# set -o xtrace
# Et jälgida, mis töötab. Kasulik silumiseks. Lubage see ainult vigade kontrollimiseks.

Ärge unustage lisaks järgida neid soovitusi:

01.- Indente oma kood: Koodi loetavaks muutmine on väga oluline ja see näib ka paljud inimesed ununevat. Proovige teha vajalikud taanded silmapiiril hea loogilise struktuuri tajumiseks.

02.- Lisa tühikud koodilõikude vahele: See võib aidata koodi palju paremini mõistetavaks muuta, kuna moodulite või sektsioonide vaheline kaugus muudab koodi loetavaks ja hõlpsasti mõistetavaks.

03. - Kommenteerige koodi võimalikult palju: Iga käsukäsu (täitmisrida) või koodiosa ülaosas (või lõpus) ​​on ideaalne lisada skripti (de) funktsiooni kirjeldus, et selgitada, mis koodis endas toimub.

04. - Looge muutujaid nende funktsioonide kirjeldavate nimedega: Määra kirjeldavad muutujate nimed, mis ilmselgelt tuvastavad funktsiooni, mille jaoks see luuakse. Ehkki loote ajutisi muutujaid, mida ei kasutata kunagi väljaspool ühte koodiplokki, on siiski hea panna nimi, mis kaudselt (objektiivselt) selgitab, milliseid väärtusi või funktsioone see haldab.

05.- Kasutage käsu asendamiseks süntaksi VARIABLE = $ (käsk): Kui soovite luua muutuja, mille väärtus on tuletatud mõnest teisest käsust, on bashis seda teha kahel viisil. Koos tagurpidiehk siis tegelastega " , Emm: VARIABLE = "käsu -optsioonide parameetrid", kuid see on juba aegunud, seega süntaks VARIABLE = $ (käsk) see on kõige kaasaegsem, aktsepteeritum ja soovitatav viis. EI -> KUUPÄEV = "kuupäev +% F" / JAH -> KUUPÄEV = $ (kuupäev +% F)

06.- Kasutage superkasutaja ja volitatud kasutaja valideerimise mooduleid ja / või muutujaid parooliga või ilma: Vajaduse korral turvalisuse taseme tõstmiseks.

07.- Kasutage operatsioonisüsteemi valideerimise mooduleid ja / või muutujaid (Distro, versioon, arhitektuur): selleks, et vältida kasutamist sobimatutel platvormidel.

08.- Kriitiliste või paketttoimingute (moodulid / funktsioonid) täitmise kinnitamiseks kasutage mooduleid (protseduure / jaotisi): Improvisatsioonist või hoolimatusest tingitud vigade minimeerimiseks.

09. - kasutajasõbralike liideste pakkumine (kasutajasõbralik): Terminali poolt menüüde ja värvidega Dialoog ja Graafilised liidesed põhikasutajatele Zenity, Gxmessage abil. Ja võimaluse korral kasutage heli järgi äratuntavate sündmuste identifikaatorite helisignaale. Püüdsin nii palju kui võimalik, et teie skript suudaks töötage mõlemal viisil, lubades ja keelates ainult valikud / moodulid / funktsioonid.

10. - Lisage tervitus- ja hüvastijätumoodulid (sõnumid): vajadusel kasutajaga interaktiivsuse suurendamiseks.

11.- Kaasa topelt täitmise kontrollimoodul: Looge selle jaoks lukustusfail, et vältida selle käivitamist korraga rohkem kui 1 kord.

12.- ratsionaliseeri skripti suurus väliste funktsioonide ja / või moodulitega: Kui skript on väga suur, jagage kood funktsioonide abil või jagage need väikesteks skriptideks, mida kutsutakse peamise kaudu.

13. - üleskutsed skriptis teistele tõlkidele (programmeerimiskeeltele) selgelt ja arusaadavalt: Kutsuge neid selgelt ridade või moodulite abil.

Näide:

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

Tulevikes väljaannetes laiendame üksikasjalikumalt kõiki ülalkirjeldatud tavasid.

Ja kui teate mõnda muud head tava, nii enda kui ka teisi, siis ärge kartke neid kommenteerida, et koostada terviklikum kokkuvõte!

Kuni selle uue sarja järgmise väljaandmiseni.


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   Max j ​​rodriguez DIJO

    Ainult üks detail, see on "shebang" 😛
    väga hea postitus, head tavad pikas perspektiivis aitavad alati standardida.

  2.   Üks, mis siit mööda läks DIJO

    Bash pole kõigi jaotuste vaikekest ja seetõttu ei osuta sümboolne link / bin / sh alati bashile. Näiteks Debianis (ja eeldan seetõttu, et Ubuntu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 juurjuur 4 aza 8 2014 / bin / sh -> kriips
    Seetõttu on Debiani vaikekoor sidekriips. Vaata siia: https://wiki.debian.org/Shell

  3.   nimeta DIJO

    Kasutatava kesta tundmiseks:

    kaja $ 0
    kaja $ SHELL
    env | haara kest

  4.   Ing Jose Albert DIJO

    Sul on tõepoolest õigus! Proovisin DEBIAN 9 ja Kali Linux 2.0 ja see on tõsi! viib sind kriipsu peale. Veelgi enam: #! / Usr / bin / env bash soovitus, kui soovite kasutada seda Shelli.

    Ja teil on täiesti õigus, et see on shebang, kuid mõnel veebisaidil (tehnilises kirjanduses) kutsuvad nad seda shabangiks või muudeks sõnadeks, sellest ka minu segadus. Näide:

    Arvutamisel on šebang tähemärkide järjestus, mis koosneb tähemärkide numbrimärgist ja hüüumärgist (#!) Skripti alguses. Seda nimetatakse ka sha-bang, [1] [2] hashbang, [3] [4] pound-bang, [5] või hash-pling

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

    Y Peatükk 2. Sha-Bangiga alustamine
    From: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Ing Jose Albert DIJO

    Samuti: basename $ 0