Mësoni se si të llogaritni shkronjën DNI duke përdorur një skenar Bash

Pasi të keni kënaqur requisitos para të jetë në gjendje të ekzekutojë skenare bash, dhe kuptoni si të përcaktohen funksionet, mësoni si kthimi i vlerave në funksionet bash. Për këtë ne do të krijojmë një program të vogël "por të fuqishëm" në Bash që llogaritni shkronjat e DNI. Kam një lajm të mirë: Bash mundet gjithashtu instalohet në Windows 10. Me atë që mund të shtohet e gjithë fuqia e Linux në sistemet operative, le të themi ... të ndryshme.

Para së gjithash, ne duhet të kuptoni se si nënshtresat, e cila, si në çdo gjuhë, ka mundësinë e kthimi i pjesëve të një vargu nga treguesi i zinxhirit, pozicionit dhe gjatësisë së segmentit. Le të shohim një shembull të kësaj sjelljeje. Ne krijojmë skenarin tonë me

$ touch prueba_substring
$ 

Pastaj ne shtojmë kodin e mëposhtëm me redaktorin tuaj të preferuar. Në modalitetin terminal redaktori im i preferuar është mcedit. Por kohët e fundit shoh që nano po merr forcë.

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

Shtimi i lejeve dhe ekzekutimi si kjo:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Duhet, nëse gjithçka shkoi mirë, të kthente rezultatin vijues:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Operacioni i nënshtresave

Siç mund ta shihni më lart Unë kam theksuar linjat 13 deri në 15 nga skenari dhe hapi në shpjegoni kodin tuaj. jehonë me parametri "-e" lejon të tregojmë karakteri i rreshtit tjetër, ne e kemi përcaktuar këtë karakter në rreshti 7 dhe i caktohet ndryshores «ret».

Linja 13: Unë tregoj nënshtresën (nënshtresë) të ndryshores CHAIN, të përshkruar në rreshtin 8, nga pozicioni 12. Gjithmonë filloni të numëroni nga pozicioni 0.

Linja 14: Nga pozicioni 12 i ndryshores CHAIN, unë tregoj një segment prej 5. Siç do ta verifikoni kjo korrespondon me nënshtresa "Linux".

Rreshti 15: Unë krijoj një varg i ri i mbyllur në thonjëza Filloj si «Mësoj në», për të vazhduar me një nënshtresë të ndryshores CHAIN nga pozicioni 31, duke marrë një segment prej 7: kjo i korrespondon «Ubunlog».

Funksionet e prapambetjes

Mekanizmi i kthimit me Bash prodhohet nga komanda "kthim", megjithëse, kur duhet ta përputhim atë me një ndryshore Bash, ai zbaton një mekanizëm "të çuditshëm", të cilit ju duhet të mësoheni. Le të shohim shembullin vijues:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Funksionet duhet të përcaktohen gjithmonë përpara se t'i përdorni në Bash, pra, pas shebang deklarojmë shumën e funksionit, në rreshtin 4 ne përcaktojmë me anë të «lokalit» caktimin e parametrit të parë ($ 1) tek ndryshorja "a". Procedura identike në rreshtin 5, ku ne caktojmë parametrin e dytë a ($ 2) ndryshores «b». Në rreshtin nëntë ne e quajmë funksionin e shumës me dy parametra që do të shndërrohen nga mekanizmi i përshkruar në variablat "a" dhe "b" dhe me "return" i kthejmë ato të shtuara, siç mund të shihet lehtësisht në udhëzimet e funksionit.

Ne caktojmë ndryshoren "return" në rreshti 10 rezultati i ekzekutimit të shumës së funksionit.

Pas studimit dhe kuptimit të mënyrës në të cilën praktikohen kthimet e vlerave dhe caktimi i variablave Le të shkojmë të shohim programin tonë të llogaritja e shkronjave DNI me Bash.

Skript për të llogaritur shkronjat DNI me 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 letra e DNI-së tonë Ajo korrespondon me moduli i numrit 23. Kjo është, ne ndajmë numrin me 23 y në vend që të shikojmë herësin, vëzhgojmë pjesën tjetër të ndarjes. Fjalët e tjera, si numrat e pjesëtueshëm me 23 do të japin zero, letra që korrespondon me të është «T», pasi kjo është pozicioni 0, siç e kemi parë në skenarin e mësipërm, të gjithë nënshtresat fillojnë të numërojnë nga zero. Kjo është, me modulin ne gjithmonë do të marrim numra ndërmjet 0 (shkronja "T") dhe 22 (shkronja "O"). Në Bash, si në gjuhët e tjera moduli merret me anë të operatorit për qind «%».

linja 5 përcaktojmë shkronjat në porosinë tuaj. Obviousshtë e qartë, urdhri nuk mund të ndryshohet për rezultate të besueshme. Në nëse e linjës 9 po pyesim nëse kur thirrni skriptin kishte një numër si parametër. Në rast se nuk ka asnjë parametër, ne e kërkojmë atë me tastierë me udhëzimet nga linjat 11 deri 13. Nëse skenari është thirrur me një numër për të llogaritur rendin në rreshtin 15, ai ia cakton këtë parametër ndryshores «ndni».

Në rreshtin 23 i referohemi funksionit modul përmes parametrit të ndryshorja «ndni», ose është mbledhur si një parametër në bash, ose nga tastiera si hyrje. Në rreshtin 24 kthimi i funksionit i është caktuar variablës «mod». Në vijën 25 mtregojmë numrin, një vizë dhe shkronjën që korrespondon me pozicionin sipas llogaritjes së modulit dhe nënshtresës.

Testimi i skenarit tonë DNI

$ ./dni 12345678
12345678-Z

O mirë,

$ ./dni

 Cálculo DNI, Introduce número

Të gjitha skenarët tanë duhet të përfshijnë një parametër "-a" për autorin dhe një tjetër "-h" për ndihmë dhe sintaksë. Siç kemi parë në artikujt e mëparshëm ose jua lë juve që të shmangni bërjen e kodit më të rëndë.
Shpresoj dhe shpresoj që ky artikull të ketë qenë në interesin tuaj.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   Omar B.M. dijo

    Përshëndetje, a mund të më ndihmojë dikush, duhet të instaloj lubuntu në desktopin tim të vjetër, por nuk më lejon të instaloj përmes USB dhe disku DVD është i dëmtuar, unë vetëm dua të instaloj http://www.plop.at tek Ubuntu 16.04 LTS por nuk di si ta bëj. Faleminderit

    1.    Imazhi i mbajtësit të vendit Pedro Ruiz Hidalgo dijo

      Omar,

      Siç e përmendët situata nuk është shumë premtuese: usb nuk mbetet dhe makina DVD dëmtohet. Por ju gjithashtu komentoni se "kompjuteri është i vjetër", kjo do të thotë që ju keni një të ri. Provoni ta vendosni instalimin në një hard disk nga kompjuteri juaj që punon dhe të përpiqeni ta instaloni nga ajo disk.

      të fala

    2.    Cesar Deba dijo

      A keni një kompjuter dhe një kuti të lëvizshme? Montoni hard diskun e kompjuterit të vjetër në kutinë e lëvizshme usb dhe filloni diskun e instalimit.
      Linux dhe Unix nuk marrin parasysh harduerin në nivelin e nisjes, me të cilin mund ta vendosni përsëri diskun me instaluar linux.

    3.    Omar B.M. dijo

      Faleminderit shumë Unë ju them se ajo që bëra ishte të shkoja nga Ubuntu 16.04 në Lubuntu 16.04 brenda të njëjtit sistem operativ hehe dhe kështu kompjuteri im i vjetër po funksiononte mirë përshëndetjet nga Kolumbia.