Leer hoe u de DNI-letter kunt berekenen met behulp van een Bash-script

Na het voldoen aan de vereisten voor bash-scripts kunnen uitvoeren, en begrijp hoe functies te definiëren, leren hoe waarden teruggeven in bash-functies​ Hiervoor gaan we een klein ―maar krachtig― programma maken in Bash That bereken de letters van de DNI​ Ik heb goed nieuws: Bash kan ook worden geïnstalleerd op Windows 10​ Met wat alle kracht van Linux in besturingssystemen kan worden toegevoegd, laten we zeggen ... anders.

Allereerst moeten we begrijp hoe de subtekenreeksen, die, zoals in elke taal, de mogelijkheid heeft om retourneer delen van een string van de aanduiding van de ketting, de positie en de lengte van het segment. Laten we eens kijken naar een voorbeeld van dit gedrag. We maken ons script met

$ touch prueba_substring
$ 

Vervolgens voegen we de volgende code toe met uw favoriete editor. In terminalmodus mijn favoriete editor is mcedit​ Maar de laatste tijd zie ik dat nano aan kracht wint.

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

De rechten toevoegen en als volgt uitvoeren:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Het zou, als alles goed is gegaan, het volgende resultaat moeten opleveren:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Substring-operatie

Zoals je hierboven kunt zien Ik heb de regels 13 tot 15 gemarkeerd van het script en stap naar leg je code uit. echo de parameter "-e" laten we de volgende regel karakterhebben we dit karakter gedefinieerd in de regel 7 en toegewezen aan de variabele «ret».

Regel 13: Ik toon de deelstring (deelstring) van de variabele CHAIN, beschreven in regel 8, vanaf positie 12. Altijd beginnen te tellen vanaf positie 0.

Lijn 14: Van positie 12 van de CHAIN-variabele, ik laat een segment van 5 zien​ Zoals u zult verifiëren, komt dit overeen met het substring "Linux".

Regel 15: Ik componeer een nieuwe tekenreeks tussen aanhalingstekens Ik begin als «Ik leer in«, om verder te gaan met een deelstring van de variabele CHAIN vanaf positie 31, een segment van 7 nemen: dit komt overeen met «Ubunlog».

Postback-functies

Het return-mechanisme met Bash wordt geproduceerd door het "return" -commando, hoewel, wanneer we het moeten matchen met een Bash-variabele, het een "vreemd" mechanisme implementeert, waar je aan moet wennen. Laten we naar het volgende voorbeeld kijken:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Functies moeten altijd worden gedefinieerd voordat ze in Bash worden gebruiktdaarom na de keet we declareren de functiesom, op regel 4 we definiëren door middel van «lokaal» de toewijzing van de eerste van de parameters ($ 1) naar de variabele "a". Identieke procedure op regel 5, waar we wijzen de tweede parameter a ($ 2) toe aan de variabele «b»​ In regel negen noemen we de somfunctie met twee parameters die zullen worden geconverteerd door het mechanisme dat wordt beschreven in de variabelen "a" en "b" en met "return" retourneren we ze toegevoegd, zoals gemakkelijk te zien is in de functie-instructies.

We kennen de variabele "return" toe in de regel 10 het resultaat van de uitvoering van de functie som.

Na het bestuderen en begrijpen van de manier waarop het teruggeven van waarden en toewijzing aan variabelen worden geoefend Laten we ons programma van de berekening van DNI-letters met Bash.

Script om DNI-letters te berekenen met 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 brief van onze DNI komt overeen met nummer module 23​ Esto es, we delen het getal door 23 y in plaats van naar het quotiënt te kijken, we observeren de rest van de divisie​ De andere woorden, zoals getallen die deelbaar zijn door 23, geven nul, de brief die correspondeert ermee is de «T», sinds dit is positie 0, zoals we hebben gezien in het bovenstaande script, alle subtekenreeksen tellen vanaf nul​ Dat wil zeggen, met de module zullen we altijd cijfers krijgen tussen 0 (letter "T") en 22 (letter "O")​ In Bash, net als in andere talen de module wordt verkregen door middel van de procent operator «%».

In de regel 5 definiëren we de letters in uw bestelling. Het is duidelijk, de volgorde kan niet worden gewijzigd voor betrouwbare resultaten. In de als van de lijn 9 we vragen als er bij het aanroepen van het script een nummer als parameter was​ Als er geen parameter is, vragen we deze op het toetsenbord met de instructies op regel 11 tot 13. Als het script werd aangeroepen met een nummer om de volgorde op regel 15 te berekenen, wijs deze parameter dan toe aan de variabele «ndni».

In regel 23 verwijzen we naar de modulo-functie via de parameter van variabele «ndni», ofwel verzameld als een parameter in bash, of via het toetsenbord als invoer​ In regel 24 wordt de terugkeer van de functie toegewezen aan de variabele «mod». Op de lijn van 25 meterwe tonen het nummer, een streepje en de letter die overeenkomt met de positie volgens de berekening van de modulus en de deelstring.

Ons DNI-script testen

$ ./dni 12345678
12345678-Z

O goed,

$ ./dni

 Cálculo DNI, Introduce número

Al onze scripts moeten een parameter "-a" bevatten voor de auteur en een andere "-h" voor hulp en syntaxis. Zoals we in eerdere artikelen hebben gezien, laat ik het aan jou over om te voorkomen dat de code omslachtiger wordt.
Ik hoop en hoop dat dit artikel uw interesse heeft gewekt.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Omar B.M. zei

    Hallo, kan iemand me helpen, ik moet lubuntu op mijn oude desktop installeren, maar ik kan het niet via USB installeren en het dvd-station is beschadigd, ik wil het gewoon installeren http://www.plop.at naar Ubuntu 16.04 LTS, maar ik weet niet hoe ik het moet doen. Bedankt

    1.    Tijdelijke afbeelding voor Pedro Ruiz Hidalgo zei

      Omar,

      Zoals u al zei, is de situatie niet erg veelbelovend: usb is niet achtergelaten en dvd-drive is beschadigd. Maar je merkt ook op dat de "computer oud is", dat wil zeggen dat je een nieuwe hebt. Probeer de installatie vanaf uw werkende computer op een harde schijf te zetten en probeer deze vanaf die schijf te installeren.

      groeten

    2.    Cesar Deba zei

      Heb je een computer en een verwijderbare doos? Monteer de harde schijf van de oude computer in de verwijderbare usb-box en start de installatieschijf.
      Linux en Unix houden geen rekening met de hardware op opstartniveau, waarmee je de disk weer kunt plaatsen met de linux er op geïnstalleerd.

    3.    Omar B.M. zei

      Heel erg bedankt, ik vertel je dat wat ik deed was om van Ubuntu 16.04 naar Lubuntu 16.04 te gaan binnen hetzelfde besturingssysteem hehe en dus werkte mijn oude computer goed hehe groeten uit Colombia.