Parhaat käytännöt Shell-komentosarjan luomiseen GNU / Linuxissa

Yleensä, kun aloitat Palvelinten hallinta-alue GNU / Linux- ja / tai Unix-käyttöjärjestelmillä, ihminen (kasvot) työskentelee ympäristössä, jossa yleensä on joukko ajoitettuja tehtäviä, jotka muut järjestelmänvalvojat kirjoittivat ja että jossain vaiheessa meidän on hallita (hallinnoida) ja ratkaista kaikki ongelmat, parantaa ja / tai poistaa laitoksen uuden vaatimuksen täyttämiseksi missä hän työskentelee. Joten ei ole outoa, että kaikki uudet SysAdmin Missä tahansa työpaikalla kohtaat hankalan tehtävän ymmärtää joitain Shell-komentosarja muiden luoma vanha SysAdmin, jotka eivät ole hyvin kirjoitettuja, tai ovat loogisessa tai kirjoitusrakenteessa, niitä ei ole helppo ymmärtää, tai pahimmassa tapauksessa komentokomennoilla, epätyypilliset, vanhat, tehoton tai kirjoitettu hankalalla ja hämmentävällä tavalla.

Shell-komentosarjat

kun taas huonosti kirjoitettujen komentosarjojen ratkaiseminen on aina hetkellinen ärsytys, tämä opettaa ketään hyvä SysAdmin jotakin tärkeää. Jos aiot luoda a Shell-komentosarja käyttää nykypäivän jälkeen, on aina parempi kirjoita ne erittäin ammattimaisella ja standardoidulla tavalla, jotta kukaan muu tai itse voi ajan mittaan käyttää Pienellä vaivalla ja tietämyksellä saavutetaan ymmärrys ja hallinto vähäisessä ajassa.

Siksi käytännön julkaisusarjan jälkeen "Opi Shell Scripting" Jos tutkimme joitain hyvin käytännöllisiä komentosarjoja yksinkertaisilla ja peruskomennoilla, aloitamme tästä uudesta sarjasta nimeltä "Parhaat käytännöt Shell-komentosarjan luomiseksi GNU / Linuxissa", jossa keskitymme perusteellisesti sen jokaiseen pieneen piirteeseen ja syy moniin asioihin, eli esitämme joitain vinkkejä, jotka saavat meidät tekemään parempia komentosarjoja, mutta ei niin itsellemme kuin seuraavalle henkilölle (SysAdmin), jonka on hallita niitä. Joten sinun ei tarvitse käydä läpi tylsiä ja vaikeita tehtäviä selvittää, mitä koodaan, miten ja miksi, ja miksi se ei enää toimi.

Tässä ensimmäinen (1.) viesti tämän uuden sarjan "Parhaat käytännöt hyvälle Shell-skriptille GNU / Linuxille" Puhumme siitä, mitä menee tai pitäisi mennä Shell Script -otsikko.

=======================================
PÄÄ - KUOREN KUTSU
=======================================

#! / polku / tulkita [parametri-argumentti]

Ylärivi on perusrakenne, jolla käytetään Shell-komentosarjaa GNU / Linuxille. Sen elementit voidaan kuvata seuraavasti:

#! => sha-bang

Sha-bang (#!) Luodun tai luotavan skriptin yläosassa on komentosarja, joka kertoo käyttöjärjestelmällemme, että tiedostomme on joukko komentoja, jotka syötetään (tulkitaan) sen jälkeen ilmoitetun komentotulkin avulla. Hahmopari #! itse asiassa se on maaginen numero kaksitavuinen, erityinen merkki, joka nimetä tiedostotyyppija meidän tapauksessamme suoritettava komentosarja. Heti sha-bangin jälkeen tulee nimi polku, jossa suoritettava tulkki sijaitsee, sekä mainitun tulkin nimi. Toisin sanoen, tämä on polku ohjelmaan, joka tulkitsee komentosarjan komennot, olipa kyseessä tulkki, ohjelmointikieli tai apuohjelma. Tämä kuori suorittaa komentosarjassa olevat komennot alkaen ylhäältä (rivi sha-bangin jälkeen) ja jättää huomioimatta kaikki kommentit. Jonkin verran sha bang ne voivat olla:

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

Kukin yllä kuvatuista viivoista (esimerkkinä) kutsuu eri kuorta. Linja / Bin / sh, vedota kuori oletuksena (Bash GNU / Linux-käyttöjärjestelmässä) tai muuta vastaavaa. Käyttämällä #! / Bin / sh, oletusarvo Bournen kuori Useimmissa UNIX-pohjaisten käyttöjärjestelmien kaupallisissa muunnelmissa se tekee komentosarjan luotavaksi kannettava muihin käyttöjärjestelmiin, jotka eivät ole oikein Linux, mutta samanlainen tai perustuu siihen tai UNIX: iin, vaikka tämä uhraa BASH-spesifiset piirteet. Kuitenkin järjestys "#! / Bin / sh" noudattaa normia POSIX sh -standardi.

Muista se sha-bangissa annetun polun on oltava oikea, muuten virheilmoitus, yleensä "Komentoa ei löydy", se on komentosarjan suorituksen ainoa tulos. Muista hahmopari »#! « se voidaan jättää pois, jos komentosarja koostuu vain joukosta yleisiä käyttöjärjestelmän komentoja, toisin sanoen ilman sisäisiä Shell-direktiivejä. Ja pidä tämä vielä kerran mielessä »#! / Säiliö / sh« kutsuu oletustulkin tulkin, joka oletuksena on »#! / Bin / bash« joukkueessa hänen kanssaan GNU / Linux-käyttöjärjestelmä.

Argumenttien osalta voidaan käyttää useita, mutta yleisimpiä ovat: »-E«. mikä tekee käsikirjoituksen tarkista minkä tahansa komennon suoritusvirheeto (toteutusrivi) ja jos positiivinen, pakottaa pysäyttämään ja poistumaan, tyypillinen on »-F« ja ilmoita ladattava komentosarja ja yksi harvinaisimmista on »-Rm« joka suorittaa sen poistamisen, kun sen toteutus on valmis. On mahdollista määrittää vain sha bang jopa yksi argumentti (parametri) suoritettavan ohjelman nimen jälkeen.

Ja lopuksi, kerro käsikirjoitus globaalit muuttujat, joita käytät koodisi olennaisissa osissa, esimerkiksi tapahtumien, kuten suorituspolun, valtuutetun käyttäjän, komentosarjan nimen, validointiin. Ja lopeta muun muassa ohjelman, luojan, organisaation tiedot sekä ohjelmaa koskeva lisensointi.

Neuvoni (parhaat käytännöt) valita paras sha-bang ja otsikko a Shell-komentosarja ääni:

#! / usr / bin / env bash

Miksi käyttää komentoa »Env« Ilmoitamme käyttöjärjestelmälle käytettävän tulkin tarkalleen oletusarvoisesti määritetyn polun kanssa, mikä antaa meille mahdollisuuden sha bang mikä lisää sen siirrettävyyttä, koska ei kaikissa Käyttöjärjestelmä GNU / Linux tulkeilla tai ohjelmilla on sama polku. Ja ilman argumentteja, koska sitä varten on parempi käyttää komentoa setti, koska voimme hänen kanssaan tarkista virheet, yleiset (-e) tai erityiset (+ x / -x)tai tyhjennä ympäristöasetus (-i) tai erityiset (-u / –seton) muuttujat. Ja lopuksi toteuttaa erityisiä (- o) täydentäviä toimia käsikirjoituksen sisällä.

Joten suosittelin HEADER:

#! / usr / bin / env bash
# Ilmoita bash-tulkki absoluuttisella polulla käyttöjärjestelmän mukaan.

aseta -o errexit
# Käskyttää komentosarjaa pysähtymään ja sulkeutumaan, kun komento tai suoritusrivi epäonnistuu.

set -o substantiivi
# Käsketään komentosarjaa pysähtymään ja sulkeutumaan, kun komentosarja yrittää käyttää pimeitä muuttujia.

aseta -o pipefail
# Saadaksesi viimeisen tilauksen poistumistilan, joka palautti nollasta poikkeavan poistumiskoodin.

# set -o xtrace
# Voit seurata mitä tapahtuu. Hyödyllinen virheenkorjaukseen. Ota se käyttöön vain virheiden tarkistamiseksi.

Muista noudattaa lisäksi näitä suosituksia:

01. - Indente koodisi: Koodin tekeminen luettavaksi on erittäin tärkeää, ja monet ihmiset näyttävät myös unohtavan. Yritä tehdä tarvittavat sisennykset hyvän loogisen rakenteen havaitsemiseksi näkyvissä.

02. - Lisää välilyöntejä koodiosien väliin: Tämä voi auttaa tekemään koodista paljon ymmärrettävämmän, koska moduulien tai osioiden välinen etäisyys auttaa koodia luettavaksi ja helposti ymmärrettäväksi.

03. - Kommentoi koodia mahdollisimman paljon: Jokaisen komentokäskyn (Suoritusrivi) tai Koodiosan yläreunaan (tai alaosaan) on ihanteellista lisätä kuvaus komentosarjojen toiminnoista selittääksesi, mitä itse koodissa tapahtuu.

04. - Luo muuttujia, joissa on toimintojen kuvaavat nimet: Määritä kuvaavia muuttujien nimiä, jotka selvästi tunnistavat toiminnon, jolle se luodaan. Vaikka luotkin väliaikaisia ​​muuttujia, joita ei koskaan käytetä yhden koodilohkon ulkopuolella, on silti hyvä laittaa nimi, joka implisiittisesti (objektiivisesti) selittää mitä arvoja tai toimintoja se käsittelee.

05.- Käytä syntaksia VARIABLE = $ (komento) komentojen korvaamiseen: Jos haluat luoda muuttujan, jonka arvo on johdettu toisesta komennosta, se voidaan tehdä kahdella tavalla bashissa. Kanssa taaksepäineli merkkien kanssa `` , ejm: VARIABLE = "komento -options parametrit", mutta se on jo vanhentunut, joten syntaksia VARIABLE = $ (komento) se on nykyaikaisin, hyväksytty ja suositeltu tapa. EI -> PÄIVÄYS = `päiväys +% F` / KYLLÄ -> PÄIVÄYS = $ (päiväys +% F)

06.- Käytä Superuser- ja Authorized User Validation -moduuleja ja / tai muuttujia salasanalla tai ilman sitä: Parantaa turvallisuustasoja tarvittaessa.

07.- Käytä käyttöjärjestelmän validointimoduuleja ja / tai muuttujia (Distro, Version, Architecture): estää käyttö sopimattomilla alustoilla.

08. - Vahvista kriittisten tai erätoimintojen (moduulit / toiminnot) suorittaminen moduulien (menettelyt / jaksot) avulla: Improvisoinnista tai huolimattomuudesta johtuvien virheiden minimoimiseksi.

09. - Tarjoa käyttäjäystävällisiä käyttöliittymiä (käyttäjäystävällinen): Terminaalin mukaan valikoilla ja väreillä Vuoropuhelu ja Graafiset käyttöliittymät peruskäyttäjille, joissa on Zenity, Gxmessage. Ja jos mahdollista, käytä äänihälytyksiä, jotka tunnistavat tunnistettavat tapahtumat äänen mukaan. Yritin niin paljon kuin mahdollista toimi molempiin suuntiin vain ottamalla käyttöön tai poistamalla käytöstä vaihtoehdot / moduulit / toiminnot.

10. - Sisällytä Tervetuloa- ja Jäähyväiset-moduulit (viestit): jos on tarpeen lisätä vuorovaikutteisuutta käyttäjän kanssa.

11. - Sisällytä kaksinkertainen suoritustodennusmoduuli: Luo lukitustiedosto estääksesi sen suorittamisen useammin kuin kerran kerralla.

12. - Järjennä komentosarjan koko ulkoisilla toiminnoilla ja / tai moduuleilla: Jos komentosarja on erittäin suuri, jaa koodi funktioiden avulla tai jaa ne pieniksi komentosarjoiksi, jotka kutsutaan pääkoodin avulla.

13. - Kutsu muille tulkkeille (ohjelmointikielille) Scriptin sisällä selkeällä ja selkeällä tavalla: Kutsu heidät selkeästi viivoilla tai moduuleilla.

esimerkiksi:

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

Tulevissa julkaisuissa laajennamme yksityiskohtaisemmin kutakin yllä kuvattua käytäntöä.

Ja jos tiedät joitain muita hyviä käytäntöjä, omia tai muita, älä epäröi kommentoida niitä täydellisen yhteenvedon tekemiseksi!

Tämän uuden sarjan seuraavaan julkaisuun asti.


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   Max j ​​rodriguez dijo

    Vain yksi yksityiskohta, se on "shebang" 😛
    erittäin hyvä viesti, hyvät käytännöt pitkällä aikavälillä auttavat aina standardoimaan.

  2.   Yksi joka ohitti täällä dijo

    Bash ei ole kaikkien jakelujen oletuskuori, ja siksi symbolinen linkki / bin / sh ei aina osoita bashia. Esimerkiksi Debianissa (ja oletan siksi, että Ubuntu):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 juurihakemisto 4 aza 8 2014 / bin / sh -> viiva
    Siksi Debianin oletuskuori on viiva. Katso tästä: https://wiki.debian.org/Shell

  3.   nimetön dijo

    Vinkki tuntemaan käytössä oleva kuori:

    kaiku 0
    kaiku $ SHELL
    env | ota kuori

  4.   Jose Albert dijo

    Olet todellakin oikeassa! Kokeilin DEBIAN 9: ää ja Kali Linux 2.0: ta ja se on totta! vie sinut viiva. Vielä enemmän on suositus: #! / Usr / bin / env bash, jos se on käyttämäsi kuori.

    Ja olet aivan oikeassa, se on shebang, mutta joillakin verkkosivuilla (tekniset kirjallisuudet) he kutsuvat sitä shabangiksi tai muilla sanoilla, mikä sekaannusni. Esimerkki:

    Laskennassa shebang on merkkijono, joka koostuu komentosarjan alussa olevista merkkien numeromerkistä ja huutomerkistä (#!). Sitä kutsutaan myös sha-bangiksi, [1] [2] hashbangiksi, [3] [4] pound-bangiksi [5] tai hash-plingiksi.

    Lähettäjä: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    Y Luku 2. Aloittaminen Sha-Bangilla
    Lähettäjä: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   Jose Albert dijo

    Lisäksi: basename $ 0