Najbolji primjeri za stvaranje skripte ljuske u GNU / Linuxu

Obično, kada počnete raditi na Područje administracije poslužitelja s GNU / Linux i / ili Unix operativnim sustavima, netko 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) za riješiti bilo koji problem, poboljšati i / ili eliminirati u skladu s novim zahtjevima Institucije gdje radi. Stoga nije neobično da bilo što novo SysAdmin Na bilo kojem radnom mjestu suočeni ste s glomaznim zadatkom razumijevanja nekih Shell skripta stvorili drugi stari SysAdmin, koji nisu dobro napisani ili su u logičkoj strukturi ili strukturi za pisanje, nisu lako razumljivi ili u najgorem slučaju s naredbama naredbi, netipič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 netko stvoriti Shell skripta koristiti danas, uvijek je bolje napišite ih na vrlo profesionalan i standardiziran način, tako da s vremenom bilo tko drugi ili netko drugi može s minimalni napor i znanje postižu razumijevanje i upravljanje u minimalnom vremenu.

Stoga je 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 "Najbolji primjeri 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 odgonetnuti što kodiram, kako i zašto i zašto to više ne funkcionira.

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

=======================================
GLAVA - POZIV LUŠKARE
=======================================

#! / put / tumačenje [parametar-argument]

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

#! => sha-bang

Sha-bang (#!) na vrhu skripte koja je stvorena ili će se stvoriti nalazi se skripta koja našem operativnom sustavu govori da je naša datoteka skup naredbi koje će se napajati (tumačit će) interpretatorom naredbi naznačenim nakon njega. Likovni par #! zapravo, to je čarobni broj dvobajtni, poseban marker koji odrediti vrstu datoteke, a u našem slučaju, izvršnu skriptu ljuske. Neposredno nakon sha-banga dolazi ime putanja na kojoj se nalazi tumač koji treba izvršiti plus ime spomenutog tumača. Drugim riječima, ovo je put do programa koji interpretira 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 ša-prasak 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. Crta / Bin / sh, pozovite školjka prema zadanim postavkama (Udaranje na GNU / Linux operativnom sustavu) ili drugo slično. Koristeći # / Bin / sh, zadana vrijednost Bourne školjka U većini komercijalnih inačica operativnih sustava temeljenih na UNIX-u čini skriptu stvorenom prenosiv na druge operativne sustave koji nisu Linux ispravno, ali sličan ili zasnovan na njemu ili UNIX-u, iako se time žrtvuju značajke specifične za BASH. Međutim, slijed "#! / Bin / sh" odgovara normi POSIX sh standard.

Imajte na umu da put naveden u sha-bangu mora biti točan, inače poruka o pogrešci, obično "Naredba nije pronađena", to će biti jedini rezultat izvršavanja skripte. Sjetite se likovnog para »#! « može se izostaviti ako se skripta sastoji samo od skupa generičkih naredbi operativnog sustava, odnosno bez upotrebe 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 sustav.

S obzirom na argumente, moglo bi se upotrijebiti 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« za naznačite koju skriptu učitati a jedan od najrjeđih je »-Rm« koja izvršava njegovo brisanje nakon završetka izvršenja. Moguće je navesti samo u ša-prasak do 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 put izvršenja, ovlašteni korisnik, ime skripte, između ostalog. I završite s podaci programa, tvorca, organizacije, između ostalog, plus licenciranje koje se odnosi na program.

Moj savjet (najbolji primjeri iz prakse) odabrati najbolje sha-bang i naslov a Shell skripta zvuk:

#! / usr / bin / env bash

Zašto koristiti naredbu »Env« Operacijskom sustavu ukazujemo na tumač koji će se koristiti s točno određenom stazom koja je zadana u njemu, što nam omogućuje da imamo ša-prasak 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 postaviti, jer s njim možemo potvrditi pogreš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, do izvršavati određene (- o) komplementarne radnje unutar skripte.

Dakle, moj preporučeni HEADER bi bio:

#! / usr / bin / env bash
# Označite bash tumač s apsolutnom stazom od strane operativnog sustava.

postaviti -o errexit
# Reći skripti da se zaustavi i zatvori kad naredba ili redak izvršenja ne uspije.

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

set -o neuspjeh cijevi
# Da biste dobili status izlaza posljednje narudžbe koja je vratila kôd izlaza koji nije nula.

# postavi -o xtrace
# Da biste pratili što radi. Korisno za otklanjanje pogrešaka. Omogućite ga samo za provjeru pogrešaka.

Ne zaboravite dodatno slijediti ove preporuke:

01.- Uvucite 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: To može učiniti kôd mnogo razumljivijim, jer razmak po modulima ili odjeljcima pomaže kod učiniti čitljivim i lakim za razumijevanje.

03.- Komentirajte što je više moguće o kodu: Na vrh (ili dno) svakog naredbenog reda (reda za izvršavanje) 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 pojedinog bloka koda, ipak je dobro staviti ime koje implicitno (objektivno) objašnjava 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 bashu. S povratni udarac, odnosno s likovima `` , npr.: VARIABLE = `parametri naredbe -options`, ali već je zastario, pa je sintaksa VARIABLE = $ (naredba) to je najsuvremeniji, 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 razinu sigurnosti ako je potrebno.

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

08.- Upotrijebite module (postupke / odjeljke) za potvrdu izvršavanja kritičnih ili skupnih radnji (moduli / funkcije): Da bi se minimalizirale pogreške zbog improvizacije ili nepažnje.

09. - Omogućiti korisničko sučelje (user-friendly): Terminal s izbornicima i bojama s dijalog i Grafička sučelja za osnovne korisnike sa Zenity, Gxmessage. A ako je moguće, koristite podršku zvučnim upozorenjima koja prepoznaju prepoznatljive događaje prema zvuku. Pokušao sam što je više moguće da tvoj Script 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 dvostruki modul za provjeru izvršenja: Stvorite datoteku zaključavanja kako biste spriječili da se izvršava više od 1 puta istodobno.

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) unutar skripte: Pozovite ih jasno crtama 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 ćemo publikacijama detaljnije proširiti svaku od gore opisanih praksi.

A ako znate neke druge vlastite ili tuđe dobre prakse, nemojte se ustručavati komentirati ih kako biste napravili cjelovitiji sažetak!

Do sljedeće objave ove nove serije.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Max j ​​rodriguez dijo

    Samo jedan detalj, to je "shebang" 😛
    vrlo dobar post, dobre prakse dugoročno uvijek pomažu u standardizaciji.

  2.   Onaj koji je prolazio ovdje dijo

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

  3.   bezimen dijo

    Kao savjet za poznavanje ljuske u upotrebi:

    odjek 0 dolara
    odjek $ SHELL
    env | grep ŠKOLJKA

  4.   ing. Jose Albert dijo

    Uistinu si u pravu! Isprobao sam DEBIAN 9 i Kali Linux 2.0 i istina je! vodi vas u crticu. Još više preporuka: #! / Usr / bin / env bash ako je Shell onaj koji želite koristiti.

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

    U računanju, shebang je slikovni niz koji se sastoji od znaka s brojem znakova i uskličnika (#!) Na početku skripte. Također se naziva 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čevši od Sha-Bang-a
    Od: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   ing. Jose Albert dijo

    Također: osnovno ime $ 0