Aflați cum să calculați litera DNI utilizând un script Bash

După satisfacerea Cerințe alin să poți rula scripturi bash, și să înțeleagă cum se definesc funcțiile, afla cum returnează valori în funcțiile bash. Pentru aceasta, vom crea un mic program „dar puternic” în Bash calculați literele DNI. Am vești bune: și Bash poate să fie instalat pe Windows 10. Cu ceea ce se poate adăuga toată puterea Linux în sistemele de operare, să spunem ... diferit.

În primul rând, trebuie înțelege cum șiruri de caractere, care, ca în orice limbă, are posibilitatea returnează părți ale unui șir din indicația lanțului, poziția și lungimea segmentului. Să vedem un exemplu al acestui comportament. Ne creăm scriptul cu

$ touch prueba_substring
$ 

Apoi adăugăm următorul cod cu editorul preferat. În modul terminal editorul meu preferat este mcedit. Dar în ultima vreme văd că nano capătă putere.

 
#!/usr/bin/env bash 
# Demo comportamiento de substrings en Bash 
# Pedro Ruiz Hidalgo 
# version 1.0.0 
# Febrero 2017 

ret="\n" 
CADENA="siempre uso Linux con Ubuntu y Ubunlog, claro!" 
#      "0123456789012345678901234567890123456789012345" 
#      "          1         2         3         4     " 
# (usa la regla para medir los caracteres) 

echo -e $ret ${CADENA:12} 
echo -e $ret ${CADENA:12:5} 
echo -e $ret "Aprendo en ${CADENA:31:7}" 
exit 0 

Adăugarea permisiunilor și executarea astfel:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Dacă totul a mers bine, ar trebui să returneze următorul rezultat:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Operațiunea Substring

După cum puteți vedea mai sus Am evidențiat liniile 13-15 de la scenariu și pas la explică codul tău. Ecou cu parametru "-e" să arătăm caracterul rândului următor, am definit acest caracter în linia 7 și atribuită variabilei «ret».

Linia 13: Arăt șirul de caractere (subcord) a variabilei CHAIN, descrisă în linia 8, din poziția 12. Începând întotdeauna să număr de la poziția 0.

Linia 14: De la poziția 12 a variabilei CHAIN, arăt un segment de 5. După cum veți verifica, acest lucru corespunde cu șir „Linux”.

Linia 15: Compun a șir nou inclus între ghilimele Încep ca „Învăț în„, să continui cu un șir al variabilei CHAIN din poziția 31, luând un segment de 7: aceasta corespunde «Ubunlog».

Funcții de postback

Mecanismul de returnare cu Bash este produs de comanda „return”, deși, atunci când trebuie să-l potrivim cu o variabilă Bash, implementează un mecanism „ciudat”, cu care trebuie să te obișnuiești. Să vedem următorul exemplu:

#!/usr/bin/env bash

function suma(){
  local a=$1
  local b=$2
  return $(( $a + $b ))
}

suma 12 23
retorno=$?
echo $retorno

Funcțiile trebuie întotdeauna definite înainte de a le utiliza în Bash, prin urmare, după shebang declarăm suma funcției, pe linia 4 definim prin intermediul „localului” atribuirea primului dintre parametri ($ 1) la variabila „a”. Procedură identică pe linia 5, unde atribuim al doilea parametru a ($ 2) variabilei «b». În linia nouă numim funcția sumă cu doi parametri care vor fi convertiți prin mecanismul descris în variabilele „a” și „b” și cu „return” le returnăm adăugate, așa cum se poate vedea cu ușurință în instrucțiunile de funcționare.

Vom atribui variabila "return" în linia 10 rezultatul executării sumei funcției.

După ce ați studiat și înțeles modul în care se practică returnările valorilor și atribuirea variabilelor Să mergem să vedem programul nostru de calculul literelor DNI cu Bash.

Script pentru a calcula literele DNI cu Bash

#!/usr/bin/env bash

nl="\n"

LETRAS="TRWAGMYFPDXBNJZSQVHLCKEO"
NORMAL=0
ERROR=66

if [ $# -lt 1 ];
then
	echo -e "$nl Cálculo DNI, introduce número$nl"
	read -r ndni
	[ -z "${ndni//[0-9]}" ] && [ -n "$ndni" ] || echo "Sólo números" && exit $ERROR
else
	ndni=$1
fi

modulo ()
{
	return $(( $ndni  % 23 ))
}

modulo ndni
mod=$?
echo $ndni-${LETRAS:$mod:1}
exit $NORMAL

La scrisoare a DNI-ului nostru Corespunde la modulul numeric 23. Aceasta este, împărțim numărul la 23 y în loc să se uite la coeficient, observăm restul diviziunii. Celelalte cuvinte, cum ar fi numerele divizibile cu 23 vor da zero, scrisoarea care îi corespunde este „T”, de atunci este poziția 0, așa cum am văzut în scenariul de mai sus, toate șirurile încep să numere de la zero. Adică, cu modulul vom obține întotdeauna numere între 0 (litera "T") și 22 (litera "O"). În Bash, ca și în alte limbi modulul se obține cu ajutorul procentului de operator «%».

În linia 5 definim literele în comanda ta. Este evident, ordinea nu poate fi modificată pentru rezultate fiabile. În cazul în care linia 9 întrebăm dacă la apelarea scriptului exista un număr ca parametru. Dacă nu există niciun parametru, îl solicităm de la tastatură cu instrucțiunile de pe rândurile 11-13. Dacă scriptul a fost apelat cu un număr pentru a calcula ordinea de pe linia 15, atribuiți acest parametru variabilei «ndni».

În linia 23 ne referim la funcția modulo prin parametrul variabila «ndni», fie a fost colectată ca parametru în bash, fie de tastatură ca intrare. În linia 24, returnarea funcției este atribuită variabilei «mod». Pe linia de 25 marătăm numărul, o liniuță și litera corespunzătoare poziției conform calculului modulului și al șirului de caractere.

Testarea scriptului nostru DNI

$ ./dni 12345678
12345678-Z

Bine,

$ ./dni

 Cálculo DNI, Introduce número

Toate scripturile noastre ar trebui să includă un parametru „-a” pentru autor și un alt „-h” pentru ajutor și sintaxă. După cum am văzut în articolele anterioare sau vă las să nu faceți codul mai greoi.
Sper și sper că acest articol a fost de interesul dumneavoastră.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Omar B.M. el a spus

    Bună, mă poate ajuta cineva, trebuie să instalez lubuntu pe vechiul meu desktop, dar nu mă lasă să instalez prin USB și unitatea DVD este deteriorată, vreau doar să instalez http://www.plop.at la Ubuntu 16.04 LTS, dar nu știu cum să o fac. Mulțumiri

    1.    Pedro Ruiz Hidalgo imagine de substituent el a spus

      Omar,

      După cum ați menționat, situația nu este foarte promițătoare: USB-ul nu este permis și unitatea DVD este deteriorată. Dar mai comentezi că „computerul este vechi”, asta înseamnă că ai unul nou. Încercați să puneți instalarea pe un hard disk de pe computerul dvs. de lucru și să încercați să o instalați de pe unitatea respectivă.

      În ceea ce priveşte

    2.    Cesar Deba el a spus

      Aveți un computer și o cutie detașabilă? Montați hard disk-ul vechiului computer în cutia USB detașabilă și porniți discul de instalare.
      Linux și Unix nu iau în calcul hardware-ul la nivel de boot, cu care puteți pune discul din nou cu Linux instalat.

    3.    Omar B.M. el a spus

      Vă mulțumesc mult, vă spun că ceea ce am făcut a fost să merg de la Ubuntu 16.04 la Lubuntu 16.04 în același sistem de operare hehe și așa vechiul meu computer funcționa bine hehe salutări din Columbia.