Lær hvordan du beregner DNI-bokstaven ved hjelp av et Bash-skript

Etter å ha tilfredsstilt krav til kunne kjøre bash-skript, og forstå hvordan definere funksjoner, Lær hvordan returner verdier i bash-funksjoner. For dette skal vi lage et lite "men kraftig" program i Bash det beregne bokstavene til DNI. Jeg har gode nyheter: Bash kan også installeres på Windows 10. Med det som kan legges til all kraften til Linux i operativsystemer, la oss si ... annerledes.

Først og fremst må vi forstå hvordan dels, som, som på ethvert språk, har muligheten for returnere deler av en streng fra indikasjonen av kjeden, posisjonen og lengden på segmentet. La oss se på et eksempel på denne oppførselen. Vi lager skriptet vårt med

$ touch prueba_substring
$ 

Deretter legger vi til følgende kode med din foretrukne redaktør. I terminalmodus min foretrukne redaktør er mcedit. Men i det siste ser jeg at nano får 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 

Legge til tillatelsene og utføre slik:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Hvis alt gikk bra, skulle det returnere følgende resultat:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Understrenging

Som du kan se ovenfor Jeg har markert linje 13 til 15 fra manuset og gå til forklar koden din. Echo med parameter "-e" lar oss vise neste linjekarakter, vi har definert denne karakteren i linje 7 og tilordnet variabelen «ret».

Linje 13: Jeg viser undergrunnen (delstreng) av CHAIN-variabelen, beskrevet i linje 8, fra posisjon 12. Begynner alltid å telle fra posisjon 0.

Linje 14: Fra posisjon 12 av CHAIN-variabelen, viser jeg et segment på 5. Som du vil bekrefte tilsvarer dette substring "Linux".

Linje 15: Jeg komponerer en ny streng vedlagt anførselstegn Jeg begynner som «Jeg lærer inn», for å fortsette med en delstreng av CHAIN-variabelen fra posisjon 31, tar et segment på 7: dette tilsvarer «Ubunlog».

Postback-funksjoner

Returmekanismen med Bash er produsert av "return" -kommandoen, men når vi må matche den med en Bash-variabel, implementerer den en "merkelig" mekanisme, som du må venne deg til. La oss 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

Funksjoner må alltid defineres før du bruker dem i Bash, derfor, etter shebang vi erklærer funksjonssummen, på linje 4 vi definerer ved hjelp av «lokal» tildelingen av den første av parameterne ($ 1) til variabelen "a". Identisk prosedyre på linje 5, hvor vi tilordner den andre parameteren a ($ 2) til variabelen «b». I linje ni kaller vi sumfunksjonen med to parametere som vil bli konvertert av mekanismen beskrevet i variabler "a" og "b" og med "return" returnerer vi dem lagt til, som det lett kan sees i funksjonsinstruksjonene.

Vi tilordner variabelen "retur" i linje 10 resultatet av utførelsen av funksjonssummen.

Etter å ha studert og forstått hvordan retur av verdier og tildeling til variabler praktiseres La oss se programmet vårt for beregning av DNI-bokstaver med Bash.

Skript for å beregne DNI-bokstaver 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 DNI Det tilsvarer nummermodul 23. Dette er, vi deler tallet med 23 y i stedet for å se på kvotienten, vi observerer resten av divisjonen. De andre ordene, som tall som kan deles med 23 vil gi null, brevet som tilsvarer det er «T», siden dette er posisjon 0, som vi har sett i skriptet ovenfor, alle underlag begynner å telle fra null. Det vil si at med modulen vil vi alltid få tall mellom 0 (bokstav "T") og 22 (bokstav "O"). I Bash, som på andre språk modulen oppnås ved hjelp av prosentoperatøren «%».

I linje 5 definerer vi bokstavene i din bestilling. Det er åpenbart, ordren kan ikke endres for pålitelige resultater. I linjens if 9 spør vi hvis det var et nummer som parameter når du ringer til skriptet. Hvis det ikke er noen parameter, ber vi om det med tastaturet med instruksjonene fra linjene 11 til 13. Hvis skriptet ble kalt med et tall for å beregne rekkefølgen på linje 15, tilordner det denne parameteren til variabelen «ndni».

I linje 23 refererer vi til modulo-funksjonen gjennom parameteren for variabel «ndni», enten har blitt samlet som en parameter i bash, eller med tastaturet som inngang. I linje 24 tildeles funksjonen tilbake til variabelen «mod». På 25 m linjenvi viser tallet, en bindestrek og bokstaven som tilsvarer posisjonen i henhold til beregningen av modul og understreng.

Testing av DNI-skriptet vårt

$ ./dni 12345678
12345678-Z

O vel,

$ ./dni

 Cálculo DNI, Introduce número

Alle skriptene våre skal inneholde en parameter "-a" for forfatteren og en annen "-h" for hjelp og syntaks. Som vi har sett i tidligere artikler, eller jeg overlater til deg å unngå å gjøre koden mer tungvint.
Jeg håper og håper at denne artikkelen har vært av din interesse.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   Omar B.M. sa

    Hei, kan noen hjelpe meg, jeg må installere lubuntu på det gamle skrivebordet mitt, men det lar meg ikke installere via USB og DVD-stasjonen er skadet, jeg vil bare installere http://www.plop.at til Ubuntu 16.04 LTS, men jeg vet ikke hvordan jeg skal gjøre det. Takk

    1.    Pedro Ruiz Hidalgo plassholderbilde sa

      Omar,

      Som du nevnte er situasjonen ikke veldig lovende: USB er ikke igjen og DVD-stasjonen er skadet. Men du kommenterer også at "datamaskinen er gammel", det betyr at du har en ny. Prøv å sette installasjonen på en harddisk fra datamaskinen din og prøve å installere den fra den stasjonen.

      Hilsen

    2.    Cesar Deba sa

      Har du en datamaskin og en flyttbar boks? Monter harddisken til den gamle datamaskinen i den flyttbare USB-boksen og start installasjonsdisken.
      Linux og Unix tar ikke hensyn til maskinvaren på oppstartsnivå, som du kan sette disken på igjen med linux installert.

    3.    Omar B.M. sa

      Tusen takk. Jeg forteller deg at det jeg gjorde var å gå fra Ubuntu 16.04 til Lubuntu 16.04 innen samme operativsystem hehe, og så fungerte den gamle datamaskinen min bra hilsen fra Colombia.