Labākā prakse, lai izveidotu čaulas skriptu GNU / Linux

Parasti, kad sākat strādāt pie Serveru administrēšanas zona ar GNU / Linux un / vai Unix operētājsistēmām, cilvēks nonāk (sejās) strādājot vidē, kur parasti ir ķekars ieplānoto uzdevumu, ko citi administratori uzrakstīja un tas kādā brīdī mums ir jādara vadīt (administrēt) par atrisināt jebkuru problēmu, uzlabot un / vai novērst, lai izpildītu jaunas iestādes prasības kur viņš strādā. Tāpēc nav brīnums, ka kāds jauns SysAdmin Jebkurā darbavietā jūs saskaras ar apgrūtinošu uzdevumu saprast dažus no Shell skripts ko izveidojuši citi vecais SysAdmin, kas nav labi uzrakstīti vai ir loģiskā vai rakstīšanas struktūrā, nav viegli saprotami vai sliktākajā gadījumā ar komandu komandām, netipiski, veci, neefektīvi vai uzrakstīti neērti un mulsinoši.

Shell skripti

Kamēr slikti uzrakstītu scenāriju risināšana vienmēr ir īslaicīgs kairinājums, tas māca ikvienu labs SysAdmin kaut kas svarīgs. Ja kāds gatavojas izveidot Shell skripts vienmēr ir labāk izmantot rakstiet tos ļoti profesionāli un standartizēti, lai laika gaitā jebkurš cits vai pats varētu ar ar minimālām pūlēm un zināšanām panākt izpratni un administrēšanu minimālā laikā.

Tāpēc pēc praktisko publikāciju sērijas par "Uzziniet čaulas skriptu" kur mēs pārbaudīsim dažus ļoti praktiskus skriptus ar vienkāršām un pamata komandām, sāksim ar šo jauno sēriju, ko sauc "Shell skripta izveides paraugprakse GNU / Linux", kur mēs rūpīgi pievērsīsimies katram tā mazajam aspektam un daudzu lietu iemeslam, tas ir, mēs aplūkosim dažus padomus, kas liks mums izveidot labākus skriptus, bet ne tik daudz sev, bet gan nākamajai personai (SysAdmin), kurai ir pārvaldīt tos. Tāpēc jums nav jāpārvar garlaicīgs un grūts uzdevums, lai saprastu, ko es kodēju, kā un kāpēc un kāpēc tas vairs nedarbojas.

Šajā pirmā (1.) ziņa šīs jaunās sērijas "Labas čaulas skripta paraugprakse GNU / Linux" Mēs runāsim par to, kas notiek vai kam jāiet iekšā Shell Script galvene.

=======================================
GALVENE - KUĢA UZSAUKŠANA
=======================================

#! / path / interpretēt [parametrs-arguments]

Augšējā līnija ir pamatstruktūra, ar kuru tiek izsaukts Shell skripts GNU / Linux. Tās elementus var raksturot šādi:

#! => sha-bang

Sha-bang (#!) izveidotā vai izveidojamā skripta augšdaļā ir skripts, kas mūsu operētājsistēmai saka, ka mūsu fails ir komandu kopa, kuru baros (interpretēs) pēc tā norādītais komandu tulks. Rakstzīmju pāris #! patiesībā tas ir burvju numurs divbaits, īpašs marķieris, kas norādiet faila tipu, un mūsu gadījumā izpildāms čaulas skripts. Tūlīt pēc sha-bang nāk nosaukums ceļš, kurā atrodas izpildāms tulks, kā arī minētā tulka vārds. Citiem vārdiem sakot, tas ir ceļš uz programmu, kas interpretē skripta komandas neatkarīgi no tā, vai tas ir tulks, programmēšanas valoda vai utilīta. Pēc tam šī čaula izpilda komandas skriptā, sākot no augšas (rinda pēc sha-bang) un ignorējot visus komentārus. Daži ša-sprādziens tie var būt:

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

Katra no iepriekš aprakstītajām līnijām (kā piemērs) izsauc atšķirīgu apvalku. Līnija / Bin / sh, izsaukt apvalks pēc noklusējuma (Bash uz GNU / Linux operētājsistēmas) vai citas līdzīgas. Izmantojot # / Bin! / Sh, noklusējuma vērtība Bourne apvalks Lielākajā daļā UNIX balstīto operētājsistēmu komerciālo variantu tas padara skriptu izveidotu pārnēsājama uz citām operētājsistēmām, kas nav pareizi Linux, bet līdzīgi vai balstīti uz to vai UNIX, lai gan tas upurē BASH specifiskās īpašības. Tomēr secība "#! / Bin / sh" atbilst normai POSIX sh standarts.

Ņemiet vērā, ka sha-bangā norādītajam ceļam jābūt pareizam, pretējā gadījumā parasti tiek parādīts kļūdas ziņojums "Komanda nav atrasta", tas būs vienīgais skripta izpildes rezultāts. Atcerieties rakstzīmju pāri »#! « to var izlaist, ja skriptu veido tikai vispārīgu operētājsistēmas komandu kopums, tas ir, neizmantojot iekšējās Shell direktīvas. Un vēlreiz atcerieties to »#! / Bin / sh« izsauc noklusējuma čaulas tulku, kas pēc noklusējuma ir »#! / Bin / bash« komandā ar viņu GNU / Linux operētājsistēma.

Attiecībā uz argumentiem ir vairāki, kurus varētu izmantot, bet visizplatītākais ir: »-E«. kas veido scenāriju pārbaudīt jebkuras komandas izpildes kļūdaso (izpildes līnija) un, ja pozitīvs, piespiež apstāties un iziet, tipisks ir »-F« par norādiet, kuru skriptu ielādēt un viens no retākajiem ir »-Rm« kas veic tā dzēšanu, kad tā izpilde ir pabeigta. Norādīt var tikai ša-sprādziens līdz a viens arguments (parametrs) pēc izpildāmās programmas nosaukuma.

Un, visbeidzot, pastāstiet scenāriju globālie mainīgie, kurus izmantosiet koda būtiskajās daļās, lai pārbaudītu notikumus, piemēram, izpildes ceļu, pilnvaroto lietotāju, skripta nosaukumu. Un beidziet ar cita starpā programmas, radītāja, organizācijas dati, kā arī licencēšana, kas attiecas uz programmu.

Mans padoms (paraugprakse) izvēlēties labākais sha-bang un virsraksts a Shell skripts skaņa:

#! / usr / bin / env bash

Kāpēc jāizmanto komanda »Env« Mēs operētājsistēmai norādām tulku, kas jāizmanto ar precīzu ceļu, kas tajā norādīts pēc noklusējuma, kas ļauj mums ša-sprādziens tas palielina tā pārnesamību, jo ne visos OS GNU / Linux tulkiem vai programmām ir vienāds ceļš. Un bez argumentiem, jo ​​tam labāk ir izmantot komandu noteikt, jo ar viņu mēs varam apstiprināt kļūdas, vispārīgas (-e) vai specifiskas (+ x / -x), vai uz notīrīt globālos vides (-i) vai specifisko (-u / –set) mainīgo iestatījumus. Un, visbeidzot, uz veikt īpašas (- o) papildu darbības skripta iekšpusē.

Tāpēc mans ieteicamais HEADER būtu:

#! / usr / bin / env bash
# Norādiet bash tulku ar absolūtu ceļu pēc operētājsistēmas.

set -o errexit
# Likt skriptam apstāties un aizvērt, kad neizdodas izpildīt komandu vai izpildes rindu.

set -o lietvārds
# Likt skriptam apstāties un aizvērt, kad skripts mēģina izmantot nedeklarētus mainīgos.

set -o pipefail
# Lai iegūtu pēdējā pasūtījuma, kas atgrieza nulles izejas kodu, izejas statusu.

# set -o xtrace
# Lai izsekotu, kas darbojas. Noderīga atkļūdošanai. Iespējojiet to, lai pārbaudītu tikai kļūdas.

Atcerieties papildus ievērot šos ieteikumus:

01.- Indente savu kodu: Padarīt savu kodu salasāmu ir ļoti svarīgi, un šķiet, ka to aizmirst arī daudzi cilvēki. Mēģiniet izdarīt nepieciešamos ievilkumus, lai redzētu labu loģisko struktūru.

02. - Pievienojiet atstarpes starp koda sekcijām: Tas var palīdzēt padarīt kodu daudz saprotamāku, jo atstarpes pa moduļiem vai sadaļām palīdz padarīt kodu salasāmu un viegli saprotamu.

03. - pēc iespējas komentējiet kodu: Katras komandrīkojuma (izpildes rindas) vai koda sadaļas augšdaļā (vai apakšā) ir ideāli pievienot skripta (-u) funkcijas aprakstu, lai izskaidrotu, kas notiek pašā kodā.

04. - Izveidojiet mainīgos ar aprakstošiem to funkciju nosaukumiem: Piešķiriet aprakstošus mainīgo nosaukumus, kas acīmredzami identificē funkciju, kurai tas tiks izveidots. Pat ja jūs izveidojat pagaidu mainīgos, kurus nekad neizmantos ārpus viena koda bloka, joprojām ir labi ievietot nosaukumu, kas netieši (objektīvi) izskaidro, ar kādām vērtībām vai funkcijām tas rīkojas.

05. - Komandas aizstāšanai izmantojiet sintaksi VARIABLE = $ (komanda): Ja vēlaties izveidot mainīgo, kura vērtība tiek iegūta no citas komandas, ir divi veidi, kā to izdarīt bash. Ar atkāpties, tas ir, ar rakstzīmēm " , Piemēram: VARIABLE = "komandu parametru parametri", bet tas jau ir novecojis, tāpēc sintakse VARIABLE = $ (komanda) tas ir vismodernākais, pieņemākais un ieteicamākais veids. NĒ -> DATUMS = "datums +% F" / JĀ -> DATUMS = $ (datums +% F)

06.- Izmantojiet Superuser un Authorized User Validation moduļus un / vai mainīgos ar vai bez paroles: Ja nepieciešams, paaugstināt drošības līmeni.

07.- Izmantojiet operētājsistēmas validācijas moduļus un / vai mainīgos (Distro, Version, Architecture): lai novērstu izmantošanu uz nepiemērotām platformām.

08.- Izmantojiet moduļus (procedūras / sadaļas), lai apstiprinātu kritisko vai sērijveida darbību izpildi (moduļi / funkcijas): Lai mazinātu kļūdas improvizācijas vai paviršības dēļ.

09.- Nodrošiniet lietotājam draudzīgas saskarnes (lietotājam draudzīgas): By Terminal ar izvēlnēm un krāsām ar Dialogs un Grafiskās saskarnes pamata lietotājiem ar Zenity, Gxmessage. Ja iespējams, izmantojiet skaņas brīdinājumu atbalstu, identificējot atpazīstamus notikumus atbilstoši skaņai. Es mēģināju, cik vien iespējams, jūsu skripts darbojas abos veidos, tikai iespējojot un atspējojot opcijas / moduļus / funkcijas.

10. - Iekļaujiet sveiciena un atvadu moduļus (ziņojumus): gadījumā, ja tas ir nepieciešams, lai palielinātu mijiedarbību ar lietotāju.

11.- Iekļaujiet dubultu izpildes verifikācijas moduli: Izveidojiet tam bloķēšanas failu, lai tas netiktu izpildīts vairāk nekā 1 reizi vienlaikus.

12.- Racionalizējiet skripta lielumu ar ārējām funkcijām un / vai moduļiem: Ja skripts ir ļoti liels, sadaliet kodu, izmantojot funkcijas, vai sadaliet tos mazos skriptos, kurus izsauc ar galveno.

13.- Skaidrā un nepārprotamā veidā aicinājumi uz citiem tulkotājiem (programmēšanas valodām) skripta ietvaros: Tos skaidri izsauc pa līnijām vai moduļiem.

piemērs:

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

Nākamajās publikācijās mēs detalizētāk izvērsīsim katru no iepriekš aprakstītajām praksēm.

Un, ja jūs zināt dažas citas labas prakses, savas vai citas, nevilcinieties tās komentēt, lai izveidotu pilnīgāku apkopojumu!

Līdz šīs jaunās sērijas nākamajai publikācijai.


6 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Makss j rodrigess teica

    Tikai viena detaļa, tā ir "shebang" 😛
    ļoti labs amats, laba prakse ilgtermiņā vienmēr palīdz standartizēt.

  2.   Tāds, kas šeit gāja garām teica

    Bash nav noklusējuma čaula visos izplatījumos, un tāpēc / bin / sh simboliskā saite ne vienmēr norāda uz bash. Piemēram, Debian (un tāpēc es pieņemu, ka Ubuntu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 saknes sakne 4 aza 8 2014 / bin / sh -> domuzīme
    Tāpēc Debian noklusējuma čaula ir domuzīme. Skatīt šeit: https://wiki.debian.org/Shell

  3.   bez nosaukuma teica

    Kā padoms, lai uzzinātu izmantoto čaulu:

    atbalss $ 0
    atbalss $ SHELL
    env | grep čaumalu

  4.   Ing. Hosē Alberts teica

    Jums patiešām ir taisnība! Es izmēģināju DEBIAN 9 un Kali Linux 2.0, un tā ir taisnība! aizved tevi uz domuzīmi. Vēl jo vairāk ieteikums: #! / Usr / bin / env bash, ja vēlaties izmantot čaulu.

    Un jums ir pilnīga taisnība, ka tas ir šebangs, bet dažās vietnēs (tehniskajās literatūrās) viņi to sauc par šabangu vai citiem vārdiem, tāpēc man ir neskaidrības. Piemērs:

    Aprēķinot, šebangs ir rakstzīmju secība, kas sastāv no rakstzīmju skaitļa zīmes un izsaukuma zīmes (#!) Skripta sākumā. To sauc arī par sha-bang, [1] [2] hashbang, [3] [4] pound-bang, [5] vai hash-pling

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

    Y 2. nodaļa. Sākums ar Sha-Bang
    No: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Ing. Hosē Alberts teica

    Arī: basename $ 0