Najboljše prakse za ustvarjanje skripta lupine v GNU / Linux

Običajno, ko začnete delati na Področje za upravljanje strežnikov z operacijskimi sistemi GNU / Linux in / ali Unix, človek se znajde (obrazi) v okolju, kjer običajno obstaja kup načrtovanih nalog, ki so jih napisali drugi skrbniki in da na neki točki moramo upravljati (upravljati) za rešiti kakršno koli težavo, izboljšati in / ali odpraviti, da izpolni novo zahtevo ustanove kjer dela. Torej ni čudno, da je kaj novega Sistemski skrbnik Na katerem koli delovnem mestu ste pred okorno nalogo razumevanja nekaterih Shell scenarij ki so jih ustvarili drugi stari SysAdmin, ki niso dobro napisani ali so v logični ali pisalni strukturi, jih ni enostavno razumeti ali v najslabšem primeru z ukazi ukaza, netipičnimi, starimi, neučinkovitimi ali napisanimi na neroden in zmeden način.

Shell Scripting

Medtem ko reševanje slabo napisanih scenarijev je vedno trenutna sitnost, to koga uči dober SysAdmin nekaj pomembnega. Če bo nekdo ustvaril Shell scenarij uporabiti še danes, je vedno bolje jih napišite na zelo profesionalen in standardiziran način, tako da sčasoma lahko kdor koli drug ali sam z z minimalnim trudom in znanjem dosežemo razumevanje in upravljanje v minimalnem času.

Zato je po praktični seriji objav o "Naučite se skriptiranja lupine" kjer bomo s preprostimi in osnovnimi ukazi preučili nekaj zelo praktičnih skript, bomo začeli s to novo serijo "Najboljše prakse za ustvarjanje skripta lupine v GNU / Linux", kjer se bomo temeljito osredotočili na vsak njegov majhen vidik in razlog za marsikaj, torej bomo zajeli nekaj nasvetov, zaradi katerih bomo naredili boljše scenarije, vendar ne toliko zase, ampak za naslednjo osebo (SysAdmin), jih mora upravljati. Torej vam ni treba opraviti dolgočasne in težke naloge, da ugotovim, kaj kodiram, kako in zakaj in zakaj to ne deluje več.

V tem primeru prvo (1.) delovno mesto te nove serije "Najboljši postopki za dober skript lupine za GNU / Linux" Govorili bomo o tem, kaj gre ali bi moralo iti v Glava skripta lupine.

=======================================
GLAVA - RAZPIS LUŠČINE
=======================================

#! / pot / razlaga [parameter-argument]

Zgornja vrstica je osnovna struktura, s katero se prikliče Shell Script za GNU / Linux. Njene elemente lahko opišemo na naslednji način:

#! => sha-bang

Sha-bang (#!) na vrhu skripta, ki je ustvarjen ali bo ustvarjen, je skript, ki našemu operacijskemu sistemu sporoča, da je naša datoteka nabor ukazov, ki jih bo (jih bo razlagal) tolmač ukazov, naveden za njim. Znakovni par #! pravzaprav je a čarobno število dvobajten, poseben marker, ki določite vrsto datoteke, in v našem primeru, izvedljiv skript lupine. Takoj za sha-bangom pride ime pot, kjer se nahaja tolmač, ki ga je treba izvršiti, plus ime omenjenega tolmača. Z drugimi besedami, to je pot do programa, ki interpretira ukaze v skriptu, ne glede na to, ali gre za tolmač, programski jezik ali pripomoček. Ta lupina nato izvrši ukaze v skriptu, začenši z vrha (vrstica za sha-bang) in ignorira kakršne koli komentarje. Nekateri ša-bang lahko so:

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

Vsaka od zgoraj opisanih vrstic (kot primer) prikliče drugačno lupino. Linija / Bin / sh, prikliči shell privzeto (Bash na operacijskem sistemu GNU / Linux) ali podobno. Uporaba # / Bin / sh, privzeta vrednost Bournova lupina V večini komercialnih različic operacijskih sistemov, ki temeljijo na UNIX, je skript ustvarjen prenosljiv v druge operacijske sisteme, ki niso Linux pravilno, vendar podoben ali temelji na njem ali UNIX, čeprav to žrtvuje značilnosti, značilne za BASH. Vendar zaporedje "#! / Bin / sh" ustreza normi POSIX sh standard.

Upoštevajte pot, podana v sha-bangu, mora biti pravilna, sicer sporočilo o napaki, običajno "Ukaza ni mogoče najti", bo to edini rezultat izvajanja skripta. Ne pozabite na par znakov »#! « izpusti se lahko, če je skript sestavljen samo iz nabora splošnih ukazov operacijskega sistema, torej brez uporabe notranjih direktiv Shell. In še enkrat ne pozabite, da »#! / Bin / sh« prikliče privzeti tolmač lupine, ki je privzeto »#! / Bin / bash« v ekipi z njim Operacijski sistem GNU / Linux.

Kar zadeva argumente, bi jih lahko uporabili več, najpogostejši pa je: »-E«. kar naredi scenarij preverite napake pri izvajanju katerega koli ukazao (izvedbena črta) in če je pozitivna, prisili zaustavitev in izhod, tipičen je »-F« za navedite, kateri skript želite naložiti in eden redkih je »-Rm« ki izvede njegovo brisanje po končanem izvajanju. Določiti je mogoče samo v ša-bang do en argument (parameter) za imenom programa, ki se izvaja.

In na koncu povejte scenarij globalne spremenljivke, ki jih boste uporabili v bistvenih delih kodeza preverjanje veljavnosti dogodkov, kot so izvedbena pot, pooblaščeni uporabnik, ime skripta, med drugim. In končaj s podatki o programu, ustvarjalcu, organizaciji, vključno z licencami, ki veljajo za program.

Moj nasvet (najboljše prakse) izbrati najboljši sha-bang in naslov a Shell scenarij Zvok:

#! / usr / bin / env bash

Zakaj uporabljati ukaz »Env« Operacijskemu sistemu navajamo tolmač, ki naj bo uporabljen s točno določeno potjo, ki je privzeto določena v njem, kar nam omogoča ša-bang to poveča njegovo prenosljivost, ker ne pri vseh OS GNU / Linux tolmači ali programi imajo isto pot. In brez argumentov, ker je za to bolje uporabiti ukaz nastavite, ker z njim lahko preveri napake, splošne (-e) ali posebne (+ x / -x)ali na počistite globalne prednastavitve za spremenljivke okolja (-i) ali določene (-u / –unset). In končno, da izvajati posebne (- o) komplementarne ukrepe znotraj skripta.

Torej moj priporočeni HEADER bi bil:

#! / usr / bin / env bash
# Navedite tolmač bash z absolutno potjo z operacijskim sistemom.

nastavite -o errexit
# Ukazati skriptu, naj se ustavi in ​​zapre, kadar ukaz ali vrstica izvajanja ne uspe.

set -o samostalnik
# Povedati skriptu, naj se ustavi in ​​zapre, ko poskuša skript uporabiti neprijavljene spremenljivke.

set -o okvara cevi
# Za pridobitev stanja izstopa zadnjega naročila, ki je vrnilo ne-nič izhodno kodo.

# set -o xtrace
# Za sledenje, kaj teče. Uporabno za odpravljanje napak. Omogočite ga, če želite preveriti samo napake.

Ne pozabite dodatno upoštevati teh priporočil:

01. - Vstavite svojo kodo: Zelo pomembno je, da je vaša koda berljiva, in na to veliko ljudi pozabi. Poskusite narediti potrebne vdolbine, da boste zaznali dobro logično strukturo.

02. - Med presledke kode dodajte presledke: To lahko pripomore k bolj razumljivi kodi, saj razmik po modulih ali odsekih pomaga, da je koda berljiva in enostavna za razumevanje.

03. - Čim več komentirajte kodo: Na vrh (ali spodaj) vsakega ukaznega vrstnega reda (izvršilna vrstica) ali odseka kode je idealno dodati opis funkcije skriptov, da razložite, kaj se zgodi znotraj same kode.

04.- Ustvari spremenljivke z opisnimi imeni njihovih funkcij: Dodelite opisna imena spremenljivk, ki očitno identificirajo funkcijo, za katero bo ustvarjena. Čeprav ustvarite začasne spremenljivke, ki se nikoli ne bodo uporabljale izven enega bloka kode, je vseeno dobro, da vnesete ime, ki implicitno (objektivno) razloži, katere vrednosti ali funkcije obravnava.

05. - Za zamenjavo ukaza uporabite sintakso VARIABLE = $ (ukaz): Če želite ustvariti spremenljivko, katere vrednost izhaja iz drugega ukaza, lahko to storite v bash na dva načina. S hrbet, to je z znaki " , npr.: VARIABLE = `parametri ukaza-možnosti`, vendar je že zastarel, zato je sintaksa VARIABLE = $ (ukaz) to je najsodobnejši, sprejet in priporočljiv način. NE -> DATUM = `datum +% F` / DA -> DATUM = $ (datum +% F)

06.- Uporabite module in / ali validacijske spremenljivke super uporabnika in pooblaščenega uporabnika z geslom ali brez njega: Če želite povečati raven varnosti.

07.- Uporabite module in / ali spremenljivke za preverjanje veljavnosti operacijskega sistema (Distro, različica, arhitektura): za preprečevanje uporabe na neprimernih platformah.

08. - Z moduli (postopki / odseki) potrdite izvajanje kritičnih ali paketnih dejanj (moduli / funkcije): Da zmanjšate napake zaradi improvizacije ali neprevidnosti.

09. - Zagotovite uporabniku prijazne vmesnike (uporabniku prijazen): Do terminala z meniji in barvami z Dialog in Grafični vmesniki za osnovne uporabnike z Zenity, Gxmessage. Če je mogoče, uporabite podporo zvočnih opozoril, ki prepoznajo prepoznavne dogodke glede na zvok. Trudil sem se, kolikor je bilo mogoče, da lahko vaš Script delujte v obe smeri, samo tako, da omogočite in onemogočite možnosti / module / funkcije.

10. - Vključi module dobrodošlice in slovo (sporočila): v primeru potrebe po povečanju interaktivnosti z uporabnikom.

11. - Vključite dvojni modul za preverjanje izvedbe: Ustvarite datoteko za zaklepanje, da preprečite njeno izvajanje več kot enkrat hkrati.

12. - Racionalizirajte velikost skripte z zunanjimi funkcijami in / ali moduli: Če je skript zelo velik, razdelite kodo s pomočjo funkcij ali pa jih razdelite na majhne skripte, ki se prikličejo s pomočjo glavne.

13. - Na jasen in razločen način prikličete klice drugim tolmačem (programskim jezikom) v skriptu: Jasno jih prikliče s črtami ali moduli.

Primer:

# ================================================== #
#!/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 prihodnjih publikacijah bomo podrobneje razširili vsako od zgoraj opisanih praks.

In če poznate nekatere druge dobre prakse, svoje ali drugih, jih ne oklevajte in jih komentirajte, da boste dobili popolnejši pregled!

Do naslednje objave te nove serije.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   Max j ​​rodriguez je dejal

    Samo ena podrobnost, to je "shebang" 😛
    zelo dobro delovno mesto, dobre prakse na dolgi rok vedno pomagajo pri standardizaciji.

  2.   Tisti, ki je šel sem je dejal

    Bash ni privzeta lupina v vseh distribucijah, zato simbolična povezava / bin / sh ne kaže vedno na bash. Na primer v Debianu (in predvidevam, da torej Ubuntu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 korenski koren 4 aza 8 2014 / bin / sh -> pomišljaj
    Privzeta lupina v Debianu je torej pomišljaj. Glej tukaj: https://wiki.debian.org/Shell

  3.   brezimen je dejal

    Kot namig za poznavanje lupine v uporabi:

    odmev 0 $
    echo $ SHELL
    env | grep LUPINA

  4.   ing. Jose Albert je dejal

    Res imaš prav! Preizkusil sem DEBIAN 9 in Kali Linux 2.0 in res je! vas popelje na pomišljaj. Še bolj pa priporočilo: #! / Usr / bin / env bash, če gre za lupino, ki jo želite uporabiti.

    In popolnoma imaš prav, da gre za shebang, toda na nekaterih spletnih mestih (tehnična literatura) temu rečejo shabang ali drugače, od tod moja zmeda. Primer:

    Pri računalništvu je shebang zaporedje znakov, sestavljeno iz znakovnega števila in klicaja (#!) Na začetku skripta. Imenuje se tudi sha-bang, [1] [2] hashbang, [3] [4] funt-bang, [5] ali hash-pling

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

    Y Poglavje 2. Začetek s Sha-Bangom
    za: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   ing. Jose Albert je dejal

    Tudi: osnovno ime $ 0