Najbolje prakse za stvaranje skripte ljuske u GNU / Linuxu

Obično, kada počnete raditi na Područje administracije servera sa GNU / Linux i / ili Unix operativnim sistemima, čovjek se zatekne (radi) u okruženju u kojem obično postoji hrpa zakazanih zadataka koje su napisali drugi administratori i da u nekom trenutku moramo upravljati (administrirati) para riješiti bilo koji problem, poboljšati i / ili eliminirati u skladu s novim zahtjevima Institucije gdje radi. Stoga nije neobično da je bilo što novo SysAdmin Na bilo kojem radnom mjestu suočeni ste s glomaznim zadatkom razumijevanja nekih stvari Shell script stvorili drugi stari SysAdmin, koji nisu dobro napisani ili su u logičkoj strukturi ili strukturi za pisanje, nije ih lako razumjeti, ili u najgorem slučaju, sa naredbama naredbi, atipičnim, starim, neučinkovitim ili napisanim na neugodan i zbunjujući način.

Shell skriptiranje

Dok rješavanje loše napisanih skripti je uvijek trenutna smetnja, ovo svakoga uči dobar SysAdmin nešto važno. Ako će neko stvoriti Shell script koristiti danas više je uvijek bolje napišite ih na vrlo profesionalan i standardiziran način, tako da s vremenom bilo tko drugi ili on sam može sa minimalni napor i znanje postižu razumijevanje i upravljanje u minimalnom vremenu.

Stoga, nakon praktičnog niza publikacija o "Nauči skriptiranje školjki" gdje ćemo ispitati neke vrlo praktične skripte s jednostavnim i osnovnim naredbama, započet ćemo s ovom novom serijom "Najbolje prakse za stvaranje skripte ljuske u GNU / Linuxu", gdje ćemo se temeljito usredotočiti na svaki njegov mali aspekt i razlog mnogih stvari, tj. obradit ćemo neke savjete koji će nas natjerati da napravimo bolje skripte, ali ne toliko za sebe, već za sljedeću osobu (SysAdmin) koja mora upravljati njima. Dakle, ne morate proći dosadan i težak zadatak da otkrijete što kodiram, kako i zašto i zašto to više ne funkcionira.

U ovome prvi (1.) post ove nove serije "Najbolji primjeri za dobru skriptu školjke za GNU / Linux" Razgovarat ćemo o tome što ide ili treba ići u Zaglavlje skripte ljuske.

=======================================
GLAVA - POZIV LJUŠKA
=======================================

#! / path / interpret [parametar-argument]

Gornji redak je osnovna struktura pomoću koje se poziva Shell Script za GNU / Linux. Njegovi elementi mogu se opisati na sljedeći način:

#! => sha-bang

Sha-bang (#!) na vrhu skripte koja je kreirana ili će biti kreirana nalazi se skripta koja našem operativnom sistemu govori da je naša datoteka skup naredbi koje će napajati (tumačit će) tumač naredbi naznačen nakon njega. Par likova #! zapravo, to je magični broj dvobajtni, poseban marker koji odrediti tip datoteke, a u našem slučaju, izvršnu ljusku skriptu. Odmah nakon sha-banga dolazi ime putanja na kojoj se nalazi tumač koji treba izvršiti plus ime navedenog tumača. Drugim riječima, ovo je put do programa koji tumači naredbe u skripti, bilo da se radi o tumaču, programskom jeziku ili uslužnom programu. Zatim ova ljuska izvršava naredbe u skripti, počevši od vrha (redak nakon sha-banga), zanemarujući komentare. Neki sha bang Oni mogu biti:

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

Svaka od gore opisanih linija (kao primjer) poziva drugu ljusku. Linija / bin / sh, pozovite školjka po defaultu (Udaranje na GNU / Linux operativnom sistemu) ili slično. Korišćenje #! / bin / sh, zadana vrijednost Bourne shell U većini komercijalnih verzija operativnih sistema zasnovanih na UNIX-u čini skriptu kreiranom prenosiv na druge operativne sisteme koji nisu ispravno Linux, ali sličan ili zasnovan na njemu ili UNIX-u, iako ovo žrtvuje specifične karakteristike BASH-a. Međutim, redoslijed "#! / Bin / sh" odgovara normi POSIX sh standard.

Imajte to na umu putanja navedena u sha-bangu mora biti ispravna, inače poruka o grešci, obično "Naredba nije pronađena", to će biti jedini rezultat izvršavanja skripte. Zapamtite par likova »#! « može se izostaviti ako se skripta sastoji samo od skupa generičkih naredbi operativnog sistema, odnosno bez korištenja internih Shell direktiva. I imajte još jednom na umu da »#! / Bin / sh« poziva zadani tumač ljuske, koji je prema zadanim postavkama »#! / Bin / bash« u timu s njim GNU / Linux operativni sistem.

S obzirom na argumente, moglo bi se koristiti nekoliko njih, ali najčešći je: »-E«. što čini skriptu potvrditi pogreške izvršavanja bilo koje naredbeo (linija izvršenja) i ako je pozitivna, prisiljava zaustavljanje i izlazak, tipičan je »-F« para naznačite koju skriptu treba učitati a jedan od najrjeđih je »-Rm« koji izvršava njegovo brisanje nakon završetka izvršenja. Moguće je navesti samo u sha bang do a jedan argument (parametar) nakon naziva programa koji treba izvršiti.

I na kraju, recite scenarij globalne varijable koje ćete koristiti u bitnim dijelovima koda, za provjeru valjanosti događaja, kao što su putanja izvršenja, ovlašteni korisnik, ime skripte, između ostalog. I završi sa podaci o programu, tvorcu, organizaciji, između ostalog, plus licenciranje koje se odnosi na program.

Moj savjet (najbolje prakse) odabrati najbolji sha-bang i naslov a Shell script To su:

#! / usr / bin / env bash

Zašto koristiti naredbu »Env« Operacijskom sustavu naznačujemo interpretatora koji će se koristiti s točno određenom stazom koja je u njemu zadana, što nam omogućuje da imamo sha bang to povećava njegovu prenosivost, jer ne u svim OS GNU / Linux tumači ili programi imaju isti put. I bez argumenata, jer je za to bolje koristiti naredbu set, jer s njim možemo potvrditi greške, općenite (-e) ili specifične (+ x / -x), ili do obrišite globalne unaprijed postavljene varijable okoline (-i) ili specifičnih (-u / –unset). I na kraju, da izvršiti određene (- o) komplementarne radnje unutar skripte.

Dakle, moj preporučeni HEADER bi bio:

#! / usr / bin / env bash
# Navedite bash tumač s apsolutnom putanjom prema operativnom sistemu.

set -o errexit
# Reći skripti da se zaustavi i zatvori kada naredba ili linija izvršenja ne uspije.

set -o imenica
# Reći skripti da se zaustavi i zatvori kada skripta pokuša koristiti neprijavljene varijable.

set -o pipefail
# Da biste dobili izlazni status posljednje narudžbe koja je vratila ne-nulti izlazni kod.

# set -o xtrace
# Da biste pratili šta se izvodi. Korisno za otklanjanje grešaka. Omogućite ga da biste provjerili samo greške.

Ne zaboravite dodatno slijediti ove preporuke:

01.- Unesite svoj kod: Učiniti vaš kôd čitljivim vrlo je važno, a čini se da to zaboravlja i mnogo ljudi. Pokušajte napraviti udubljenja kako biste uočili dobru logičku strukturu na vidiku.

02.- Dodajte razmake između odjeljaka koda: Ovo može pomoći da kod bude mnogo razumljiviji, jer razmak po modulima ili odjeljcima pomaže da kôd postane čitljiv i lak za razumijevanje.

03.- Komentirajte što je više moguće o kodu: Na vrh (ili dno) svake naredbe naredbe (linija izvršenja) ili odjeljka koda, idealno je dodati opis funkcije skripte (scenarija) kako biste objasnili što se događa unutar samog koda.

04.- Stvorite varijable s opisnim imenima njihovih funkcija: Dodijelite opisna imena varijabli koja očito identificiraju funkciju za koju će biti stvorena. Iako stvarate privremene varijable koje se nikada neće koristiti izvan jednog bloka koda, ipak je dobro staviti ime koje implicitno (objektivno) objašnjava s kojim vrijednostima ili funkcijama rukuje.

05.- Koristite sintaksu VARIABLE = $ (naredba) za zamjenu naredbe: Ako želite stvoriti varijablu čija je vrijednost izvedena iz druge naredbe, postoje dva načina za to u bash-u. Sa back tick, odnosno sa likovima `` , npr.: VARIABLE = `parametri naredbe -options`, ali već je zastario, pa je sintaksa VARIABLE = $ (naredba) to je najmoderniji, prihvaćeni i preporučeni način. NE -> DATUM = `datum +% F` / DA -> DATUM = $ (datum +% F)

06.- Koristite module i / ili validacijske varijable superkorisnika i ovlaštenog korisnika sa ili bez lozinke: Da biste povećali nivo sigurnosti ako je potrebno.

07.- Koristite module i / ili varijable provjere valjanosti operativnog sistema (Distro, verzija, arhitektura): kako bi se spriječila upotreba na neprikladnim platformama.

08.- Koristite module (procedure / odjeljci) za potvrdu izvršavanja kritičnih ili skupnih radnji (moduli / funkcije): Da minimizirate greške zbog improvizacije ili nepažnje.

09. - Pružite korisničko sučelje (user-friendly): Terminal sa menijem i bojama sa dijalog i sa Grafička sučelja za osnovne korisnike sa Zenity, Gxmessage. A ako je moguće, koristite podršku identifikatora zvučnih upozorenja o prepoznatljivim događajima prema zvuku. Pokušao sam što je više moguće da vaš skript može raditi u oba smjera samo omogućavanjem i onemogućavanjem opcija / modula / funkcija.

10.- Uključite module dobrodošlice i oproštaja (poruke): ako je potrebno za povećanje interaktivnosti s korisnikom.

11.- Uključite modul za dvostruku provjeru izvršenja: Stvorite datoteku zaključavanja za nju kako biste spriječili da se izvršava više od 1 puta istovremeno.

12.- Racionalizirajte veličinu skripte s vanjskim funkcijama i / ili modulima: Ako je skripta vrlo velika, podijelite kôd pomoću funkcija ili ih podijelite na male skripte koje se pozivaju kroz glavnu.

13.- Pozivanje na jasan i evidentan način pozivima drugim tumačima (programskim jezicima) u okviru skripte: Pozovite ih jasno linijama ili modulima.

Primjer:

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

U budućim publikacijama detaljnije ćemo proširiti svaku od gore opisanih praksi.

A ako znate neke druge dobre ili vlastite prakse drugih, ne ustručavajte se komentirati ih kako biste napravili cjelovitiji sažetak!

Do sljedećeg objavljivanja ove nove serije.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Max j ​​rodriguez rekao je

    Samo jedan detalj, to je "shebang" 😛
    vrlo dobar post, dobre prakse na duge staze uvijek pomažu u standardizaciji.

  2.   Onaj koji je prošao ovdje rekao je

    Bash nije zadana ljuska na svim distribucijama, pa stoga simbolična veza / bin / sh ne pokazuje uvijek bash. Na primjer, u Debianu (i pretpostavljam stoga Ubuntuu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 root root 4 aza 8 2014 / bin / sh -> crtica
    Prema tome, zadana ljuska na Debianu je crtica. Pogledajte ovdje: https://wiki.debian.org/Shell

  3.   bezimena rekao je

    Kao savjet za poznavanje školjke u upotrebi:

    eho $ 0
    echo $ SHELL
    poslati | grep SHELL

  4.   ing. Jose Albert rekao je

    Zaista ste u pravu! Isprobao sam DEBIAN 9 i Kali Linux 2.0 i istina je! vodi vas u crtu. Još više preporuka: #! / Usr / bin / env bash ako je ljuska koju želite koristiti.

    I u potpunosti ste u pravu, to je shebang, ali na nekim web lokacijama (tehnička literatura) to nazivaju shabang ili drugim riječima, otuda i moja zbunjenost. Primjer:

    U računanju, shebang je slijed znakova koji se sastoji od znaka s brojem znakova i uskličnika (#!) Na početku skripte. Naziva se i sha-bang, [1] [2] hashbang, [3] [4] funt-bang, [5] ili hash-pling

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

    Y Poglavlje 2. Početak sa Sha-Bangom
    od: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   ing. Jose Albert rekao je

    Takođe: osnovno ime $ 0