Lær hvordan du beregner DNI-bogstavet ved hjælp af et Bash-script

Efter at have opfyldt krav para være i stand til at køre bash-scriptsog forstå hvordan man definerer funktioner, Lær hvordan returner værdier i bash-funktioner. Til dette skal vi oprette et lille ―men kraftigt ― program i Bash det beregne bogstaverne i DNI. Jeg har gode nyheder: Bash kan også installeres på Windows 10. Med hvad der kan tilføjes al kraften i Linux i operativsystemer, lad os sige ... anderledes.

Først og fremmest skal vi forstå hvordan understrenge, som som på ethvert sprog har muligheden for returnere dele af en streng fra indikationen af ​​kæden, positionen og længden af ​​segmentet. Lad os se på et eksempel på denne adfærd. Vi opretter vores script med

$ touch prueba_substring
$ 

Derefter tilføjer vi følgende kode med din foretrukne editor. I terminaltilstand min foretrukne redaktør er mcedit. Men for nylig ser jeg, at nano vinder styrke.

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

Tilføjelse af tilladelser og udførelse på denne måde:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Hvis alt gik godt, skulle det returnere følgende resultat:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Understrengning

Som du kan se ovenfor Jeg har fremhævet linje 13 til 15 af scriptet og gå til forklar din kode. Echo med parameter "-e" lad os vise næste linjekarakter, vi har defineret denne karakter i linje 7 og tildelt variablen «ret».

Linie 13: Jeg viser understrenget (understreng) af CHAIN-variablen, beskrevet i linje 8, fra position 12. Begynder altid at tælle fra position 0.

Linie 14: Fra position 12 i CHAIN-variablen, viser jeg et segment på 5. Som du vil kontrollere, svarer det til understreng "Linux".

Linie 15: Jeg komponerer en ny streng lukket i anførselstegn Jeg starter som «Jeg lærer ind« for at fortsætte med en understrengning af CHAIN-variablen fra position 31 med et segment på 7: dette svarer til «Ubunlog».

Postback-funktioner

Returmekanismen med Bash er produceret af kommandoen "return", selvom, når vi skal matche den med en Bash-variabel, implementerer den en "mærkelig" mekanisme, som du skal vænne dig til. Lad os se på følgende eksempel:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Funktioner skal altid defineres, inden de bruges i Bashderfor efter molevitten vi erklærer funktionssummen på linje 4 vi definerer tildelingen af ​​den første parameter ved hjælp af «lokal» ($ 1) til variablen "a". Identisk procedure på linje 5, hvor vi tildeler den anden parameter a ($ 2) til variablen «b». I linje ni kalder vi sumfunktionen med to parametre, der konverteres af den mekanisme, der er beskrevet i variabler "a" og "b" og med "return" returnerer vi dem tilføjet, som let kan ses i instruktionerne til funktionen.

Vi tildeler variablen "return" i linje 10 resultatet af udførelsen af ​​funktionssummen.

Efter at have studeret og forstået den måde, hvorpå returneres af værdier og tildeling til variabler praktiseres Lad os se på vores program for beregning af DNI-bogstaver med Bash.

Script til beregning af DNI-bogstaver med 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 brev fra vores DNI svarer til nummermodul 23. Dette er, vi deler tallet med 23 y i stedet for at se på kvotienten, vi observerer resten af ​​divisionen. De andre ord, ligesom tal, der kan deles med 23, giver nul, brevet, der svarer til det er «T», siden dette er position 0, som vi har set i manuskriptet ovenfor, alle understrenge begynder at tælle fra nul. Det vil sige, med modulet opnår vi altid tal mellem 0 (bogstav "T") og 22 (bogstav "O"). I Bash, som på andre sprog modulet opnås ved hjælp af procentoperatøren «%».

I linje 5 definerer vi bogstaverne i din ordre. Det er klart, rækkefølgen kan ikke ændres for pålidelige resultater. I linjens if 9 spørger vi hvis der var et nummer som parameter ved opkald til scriptet. Hvis der ikke er nogen parameter, beder vi om det ved hjælp af tastaturet med instruktionerne på linje 11 til 13. Hvis scriptet blev kaldt med et nummer for at beregne rækkefølgen på linje 15, skal du tildele denne parameter til variablen «ndni».

I linje 23 henviser vi til modulofunktionen gennem parameteren for variabel «ndni», enten er den indsamlet som en parameter i bash eller med tastaturet som input. I linje 24 tildeles funktionsreturen til variablen «mod». På 25 m-linjenvi viser antallet, et bindestreg og det bogstav, der svarer til positionen i henhold til beregningen af ​​modulet og understrenget.

Test af vores DNI-script

$ ./dni 12345678
12345678-Z

O godt,

$ ./dni

 Cálculo DNI, Introduce número

Alle vores scripts skal indeholde en "-a" -parameter for forfatteren og en anden "-h" for hjælp og syntaks. Som vi har set i tidligere artikler, eller jeg overlader det til dig at ikke gøre koden mere besværlig.
Jeg håber og håber, at denne artikel har været af din interesse.


4 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Omar B.M. sagde han

    Hej, kan nogen hjælpe mig? Jeg har brug for at installere lubuntu på min gamle stationære computer, men det tillader mig ikke at installere via USB, og dvd-drevet er beskadiget, jeg vil bare installere http://www.plop.at til Ubuntu 16.04 LTS, men jeg ved ikke, hvordan man gør det. Tak

    1.    Billede af Pedro Ruiz Hidalgo sagde han

      Omar,

      Som du nævnte, er situationen ikke særlig lovende: USB er ikke tilladt, og dvd-drev er beskadiget. Men du kommenterer også, at "computeren er gammel", det betyder, at du har en ny. Prøv at placere installationen på en harddisk fra din fungerende computer og prøve at installere den fra det drev.

      hilsen

    2.    Cesar Deba sagde han

      Har du en computer og en aftagelig kasse? Monter harddisken på den gamle computer i den flytbare USB-boks, og start installationsdisken.
      Linux og Unix tager ikke højde for hardwaren ved opstartsniveau, som du kan sætte disken på igen med linux installeret.

    3.    Omar B.M. sagde han

      Mange tak Jeg fortæller dig, at hvad jeg gjorde var at gå fra Ubuntu 16.04 til Lubuntu 16.04 inden for det samme operativsystem hehe, og så fungerede min gamle computer godt hehe hilsner fra Colombia.