Aprèn a realitzar el càlcul de la lletra de l'DNI mitjançant un script bash

Després satisfer els requisits per la poder executar els scripts Bash, I comprendre com definir funcions, Aprèn com retornar valors en funcions Bash. Per això crearem un petit -però potent- programa en Bash que calculi les lletres dels DNI. Tinc bones notícies: Bash també pot ser instal·lat en Windows 10. Amb el que pot ser afegida tota la potència de Linux en sistemes operatius, diguem ... diferents.

Primer de tot, tendim que comprendre com funcionen els subcadenes, Que com en qualsevol llenguatge, posseeix la possibilitat de retornar parts d'una cadena a partir de la indicació de la cadena, la posició i la longitud de l'segment. Vegem un exemple d'aquest comportament. Creem el nostre script amb

$ touch prueba_substring
$ 

Després afegim el següent codi amb el vostre editor preferit. En mode terminal meu editor preferit és mcedit. Però últimament veig que nano està prenent força.

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

Afegint els permisos i executant així:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Hauria, si tot ha anat bé, llançar el següent resultat:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Funcionament de les subcadenes

Com podeu observar a dalt he ressaltat les línies 13 a la 15 de l'script i pas a explicar el seu codi. ressò amb el paràmetre «-i» permet mostrar el caràcter següent línia, Aquest caràcter l'hem definit en la línia 7 i assignat a la variable «ret».

Línia 13: Mostro la subcadena (subcadena) De la variable CADENA, descrita en la línia 8, a partir de la posició 12. Sempre començant a comptar des de la posició 0.

Línia 14: A partir de la posició 12 de la variable CADENA, mostro un segment de 5. Com comprovareu això correspon a la subcadena "Linux".

Línia 15: He compost XNUMX nova cadena tancada entre cometes que començament com «Aprenc a«, per continuar amb una subcadena de la variable CADENA des de la posició 31, prenent un segment de 7: Això correspon a «Ubunlog».

Funcions amb devolució de dades

El mecanisme de devolució de dades amb Bash es produeix mitjançant l'ordre «return», si bé, quan renemos que igualar-lo a una variable Bash implementa un mecanisme «estrany», a què cal acostumar. Vegem el següent exemple:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Les funcions sempre han de ser definides abans d'usar-les en Bash, Per tant, després de la shebang declarem la funció suma, a la línia 4 definim mitjançant «local» l'assignació de el primer dels paràmetres ($ 1) a la variable «a». Idèntic procediment en la línia 5, on assignem el segon paràmetre a ($ 2) a la variable «b». En la línia nou cridem a la funció suma amb dos paràmetres que es convertiran pel mecanisme descrit en les variables «a» i «b» i amb «return» els tornem sumat, Com fàcilment pot observar-se en la instruccions de la funció.

Assignem a la variable «retorn» a la línia 10 el resultat de l'execució de la funció suma.

Després de l'estudi i comprensió de l'la forma en què es practiquen les devolucions de valors i assignació a les variables passem a veure el nostre programa d'el càlcul de lletres de DNI amb Bash.

Script per al càlcul de lletres de DNI amb 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 lletra del nostre DNI correspon a l' mòdul 23 de l'nombre. És a dir, dividim el nombre entre 23 y en comptes d'observar el quocient, observem la resta de la divisió. El altres paraules, com els nombres divisibles per 23 donaran zero, La lletra que li correspon és la «T», Ja que aquesta és la posició 0, Com hem vist en l'script de dalt, totes les subcadenes comencen a comptar des de zero. És a dir, amb el mòdul anem a obtenir sempre nombres entre 0 (lletra «T») i 22 (lletra «O»). En Bash, com en altres llenguatges s'obté el mòdul mitjançant l'operador per cent '% ».

En la linea 5 definim les lletres en el seu ordre. És obvi, no es pot canviar l'ordre per obtenir resultats fiables. Al if de la línia 9 estem preguntant si a l'trucar a l'script havia un nombre com a paràmetre. En cas de no existir paràmetre el sol·licitem per teclat amb les instruccions de les línies 11 a 13. Si l'script va ser cridat amb un nombre per calcular l'ordre en la línia 15 assigna aquest paràmetre a la variable «ndni».

En la línia 23 fem referència a la funció mòdul mitjançant el paràmetre de variable «ndni», bé hagi estat recollit com a paràmetre en bash, o per teclat com a entrada. En la línia 24 s'assigna la devolució de la funció a la variable «mod». En la línia 25 mostramos el nombre, un guió i la lletra corresponent a la posició segons el càlcul de la lliçó i la subcadena.

Provant el nostre scritp de DNI

$ ./dni 12345678
12345678-Z

O bé,

$ ./dni

 Cálculo DNI, Introduce número

Tots els nostres scripts d'incloure un paràmetre «-a» per a l'autor i un altre «-h» per a l'ajuda i sintaxi. Com que això ho hem vist en anteriors articles o ho deixo a vosaltres per no fer el codi més farragós.
Espero i desitjo que aquest article hagi estat del vostre interès.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Omar BM va dir

    Hola algú em pot ajudar necessito instal·lar Lubuntu al meu ordinador d'escriptori vella però està no em deixa instal·lar per USB i la unitat de dvd està danyada, només vull instal·lar http://www.plop.at a Ubuntu 16.04 LTS però no es com fer-ho. gràcies

    1.    Pedro Ruiz Hidalgo va dir

      Omar,

      Segons comentes la situació no és molt alagüeña: usb no es deixa i unitat dvd danyada. Però també comentes que la «ordinador és vella», això vol dir que tens una de nova. Prova a posar la instal·lació en un disc dur des de la computadora que funciona i tractar d'instal · lar des d'aquest disc.

      Salutacions

    2.    Cessar Delba va dir

      Tens un ordinador i una caixa extraïble? Munta el disc dur de l'ordinador antic a la caixa extraïble per usb i inicia el disc d'instalacion.
      Linux i Unix no tenen en compte el maquinari a nivell arrencada, amb la qual cosa pots posar de nou el disc amb el linux instal·lat.

    3.    Omar BM va dir

      Moltes gràcies li explico que el que vaig fer va ser passar d'Ubuntu 16.04 a Lubuntu 16.04 dins el mateix sistema operatiu jeje i així va quedar treballant bé el meu ordinador velleta jeje salutacions des de Colòmbia.