Lär dig hur man beräknar DNI-bokstaven med ett Bash-skript

Efter att ha uppfyllt krav till kunna köra bash-skriptoch förstå hur man definierar funktioner, lära sig hur returnera värden i bash-funktioner. För detta ska vi skapa ett litet "men kraftfullt" program i Bash det beräkna bokstäverna i DNI. Jag har goda nyheter: Bash kan också installeras på Windows 10. Med vad som kan läggas till all kraften i Linux i operativsystem, låt oss säga ... annorlunda.

Först och främst måste vi förstå hur delsträngar, som, på vilket språk som helst, har möjlighet till returnera delar av en sträng från indikationen på kedjan, positionen och längden på segmentet. Låt oss titta på ett exempel på detta beteende. Vi skapar vårt manus med

$ touch prueba_substring
$ 

Sedan lägger vi till följande kod med din föredragna redaktör. I terminalläge min föredragna redaktör är mcedit. Men nyligen ser jag att nano blir starkare.

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

Lägg till behörigheterna och kör så här:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Om allt gick bra bör det returnera följande resultat:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Understrängning

Som du kan se ovan Jag har markerat rad 13 till 15 av manuset och gå till förklara din kod. Echo med parameter "-e" kan visa nästa rad karaktär, vi har definierat denna karaktär i rad 7 och tilldelas variabeln «ret».

Rad 13: Jag visar underlaget (delsträng) av CHAIN-variabeln, beskriven i rad 8, från position 12. Börjar alltid räkna från position 0.

Rad 14: Från position 12 i CHAIN-variabeln, visar jag ett segment på 5. Som du kommer att verifiera motsvarar detta substring "Linux".

Rad 15: Jag skriver en ny sträng bifogad i citat Jag börjar som «Jag lär mig in«, för att fortsätta med en del av CHAIN-variabeln från position 31, tar ett segment av 7: detta motsvarar «Ubunlog».

Postback-funktioner

Returmekanismen med Bash produceras av kommandot "return", men när vi måste matcha det med en Bash-variabel implementerar det en "konstig" mekanism, som du måste vänja dig vid. Låt oss titta på följande exempel:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Funktioner måste alltid definieras innan du använder dem i Bashdärför efter shebang vi deklarerar funktionssumman, på rad 4 vi definierar med hjälp av «lokal» tilldelningen av den första av parametrarna ($ 1) till variabeln "a". Identiskt förfarande på rad 5, där vi tilldelar den andra parametern a ($ 2) till variabeln «b». I rad nio kallar vi summeringsfunktionen med två parametrar som kommer att konverteras av den mekanism som beskrivs i variabler "a" och "b" och med "return" returnerar vi dem tillagda, vilket lätt kan ses i funktionsanvisningarna.

Vi tilldelar variabeln "return" i rad 10 resultatet av utförandet av funktionssumman.

Efter att ha studerat och förstått hur avkastning av värden och tilldelning till variabler övas Låt oss se vårt program för beräkning av DNI-bokstäver med Bash.

Skript för att beräkna DNI-bokstäver 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 från vårt DNI motsvarar nummermodul 23. Detta är, vi delar antalet med 23 y istället för att titta på kvoten, vi observerar resten av uppdelningen. De andra orden, som siffror som kan delas med 23 ger noll, brevet som motsvarar att det är «T», sedan detta är position 0, som vi har sett i manuset ovan, alla strängar börjar räknas från noll. Med modulen får vi alltid siffror mellan 0 (bokstaven "T") och 22 (bokstaven "O"). I Bash, som på andra språk modulen erhålls med procentoperatören «%».

I rad 5 definierar vi bokstäverna i din beställning. Det är självklart, ordern kan inte ändras för pålitliga resultat. I raden om 9 frågar vi om det fanns ett nummer som parameter när man ringer till skriptet. Om det inte finns någon parameter begär vi den på tangentbordet med instruktionerna på raderna 11 till 13. Om manusen anropades med ett nummer för att beräkna ordningen på rad 15, tilldela denna parameter variabeln «ndni».

I rad 23 hänvisar vi till modulofunktionen genom parametern för variabel «ndni», antingen har den samlats in som en parameter i bash eller med tangentbordet som inmatning. I rad 24 tilldelas funktionens återkomst till variabeln «mod». På 25 m linjenvi visar siffran, ett streck och bokstaven som motsvarar positionen enligt beräkningen av modulen och underlaget.

Testar vårt DNI-skript

$ ./dni 12345678
12345678-Z

Nåväl,

$ ./dni

 Cálculo DNI, Introduce número

Alla våra skript ska innehålla en parameter "-a" för författaren och en annan "-h" för hjälp och syntax. Som vi har sett i tidigare artiklar eller lämnar jag det åt dig att inte göra koden mer besvärlig.
Jag hoppas och hoppas att den här artikeln har varit av ditt intresse.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Omar B.M. sade

    Hej, kan någon hjälpa mig, jag måste installera lubuntu på mitt gamla skrivbord men det låter mig inte installera via USB och DVD-enheten är skadad, jag vill bara installera http://www.plop.at till Ubuntu 16.04 LTS men jag vet inte hur man gör det. Tack

    1.    Platshållarbild för Pedro Ruiz Hidalgo sade

      Omar,

      Som du nämnde är situationen inte särskilt lovande: usb är inte kvar och dvd-enheten skadad. Men du kommenterar också att "datorn är gammal", det betyder att du har en ny. Försök att placera installationen på en hårddisk från din arbetsdator och försök att installera den från den enheten.

      hälsningar

    2.    Cesar Deba sade

      Har du en dator och en avtagbar låda? Montera hårddisken på den gamla datorn i den flyttbara USB-rutan och starta installationsskivan.
      Linux och Unix tar inte hänsyn till hårdvaran vid startnivå, med vilken du kan sätta skivan igen med Linux installerad.

    3.    Omar B.M. sade

      Tack så mycket jag säger att det jag gjorde var att gå från Ubuntu 16.04 till Lubuntu 16.04 inom samma operativsystem hehe och så min gamla dator fungerade bra hehe hälsningar från Colombia.