Naučte sa, ako vypočítať písmeno DNI pomocou skriptu Bash

Po uspokojení požiadavky pre vedieť spustiť bash skriptya pochopiť ako definovať funkcie, naučiť sa ako návratové hodnoty v bash funkciách. Z tohto dôvodu vytvoríme v Bashi malý ―ale výkonný― program vypočítať písmená DNI. Mám dobrú správu: Bash môže tiež byť nainštalovaný na Windows 10. S tým, čo môže dodať všetku silu Linuxu v operačných systémoch, povedzme ... rôzne.

V prvom rade musíme pochopiť, ako podreťazce, ktorý, ako v každom jazyku, má možnosť vrátiť časti reťazca z označenia reťaze, polohy a dĺžky segmentu. Pozrime sa na príklad tohto správania. Náš skript tvoríme pomocou

$ touch prueba_substring
$ 

Potom pridáme nasledujúci kód do vášho preferovaného editora. V terminálnom režime môj preferovaný editor je mcedit. Ale neskoro vidím, že nano naberá na sile.

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

Pridanie povolení a takéto spustenie:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Ak by všetko prebehlo dobre, malo by to vrátiť nasledujúci výsledok:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Podreťazcová operácia

Ako môžete vidieť vyššie Zvýraznil som riadky 13 až 15 zo scenára a krok k vysvetli tvoj kod. echo s parameter "-e" Poďme ukázať znak nasledujúceho riadku, tento znak sme definovali v riadok 7 a priradený k premennej «ret».

Riadok 13: Zobrazujem podreťazec (podreťazec) premennej CHAIN, opísanej v riadku 8, z polohy 12. Vždy sa začína počítať od polohy 0.

Riadok 14: Od pozícia 12 premennej REŤAZ, zobrazujem segment 5. Pri overovaní to zodpovedá podreťazec "Linux".

15. riadok: Skladám a nový reťazec uzavretý v úvodzovkách Začínam ako «Učím sa«, aby som pokračoval v podreťazci premennej CHAIN z pozície 31, pričom berie segment 7: toto zodpovedá «Ubunlog».

Funkcie spätného odoslania

Mechanizmus návratu s Bashom je produkovaný príkazom „return“, aj keď, keď ho musíme priradiť k premennej Bash, implementuje „podivný“ mechanizmus, na ktorý si musíte zvyknúť. Pozrime sa na nasledujúci príklad:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Funkcie musia byť vždy definované pred použitím v Bashi, teda po šebang funkčný súčet deklarujeme na riadku 4 definujeme pomocou «lokálneho» priradenie prvého z parametrov ($ 1) k premennej „a“. Rovnaký postup na riadku 5, kde druhý parameter a ($ 2) priradíme premennej «b». V riadku deväť nazývame funkciu súčtu s dvoma parametrami, ktoré sa prevedú mechanizmom opísaným v premenné „a“ a „b“ a pomocou „návratu“ ich vrátime pridané, ako je ľahko viditeľné v pokynoch k funkcii.

Priradíme premennú "návrat" v riadok 10 výsledok vykonania funkčného súčtu.

Po preštudovaní a pochopení spôsobu akým Precvičujú sa návraty hodnôt a priradenie k premenným Poďme sa pozrieť na náš program výpočet písmen DNI pomocou Bash.

Skript na výpočet písmen DNI s Bashom

#!/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 list nášho DNI zodpovedá číselný modul 23. Toto je, číslo vydelíme 23 y namiesto pohľadu na kvocient pozorujeme zvyšok rozdelenia. Ostatné slová, ako čísla deliteľné 23 budú mať nulu, list, ktorý zodpovedá tomu je «T», pretože toto je pozícia 0, ako sme videli v skripte vyššie, všetky podreťazce sa začnú počítať od nuly. To znamená, že s modulom vždy získame čísla medzi 0 (písmeno „T“) a 22 (písmeno „O“). V jazyku Bash, rovnako ako v iných jazykoch modul sa získa pomocou percenta operátora «%».

V riadok 5 definujeme písmená v objednávke. Je to zrejmé, poradie nie je možné zmeniť pre spoľahlivé výsledky. V prípade riadku 9 pýtame sa ak pri volaní skriptu bolo ako parameter číslo. Ak nie je žiadny parameter, vyžiadame si ho pomocou klávesnice s pokynmi na riadkoch 11 až 13. Ak bol skript vyvolaný číslom na výpočet poradia na riadku 15, priraďte tento parameter k premennej «ndni».

V riadku 23 odkazujeme na funkciu modulo cez parameter premenná «ndni», buď bola zhromaždená ako parameter v bash, alebo pomocou klávesnice ako vstup. V riadku 24 je návrat funkcie priradený premennej «mod». Na trati 25 mzobrazíme číslo, pomlčku a písmeno zodpovedajúce polohe podľa výpočtu modulu a podreťazca.

Testuje sa náš skript DNI

$ ./dni 12345678
12345678-Z

Dobre,

$ ./dni

 Cálculo DNI, Introduce número

Všetky naše skripty by mali obsahovať parameter „-a“ pre autora a ďalšie „-h“ pre pomoc a syntax. Ako sme už videli v predchádzajúcich článkoch, prenechám to na vás, aby ste sa vyhli ťažkopádnosti kódu.
Dúfam a dúfam, že vás tento článok zaujal.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   Omar B.M. dijo

    Dobrý deň, môže mi niekto pomôcť, musím na moju starú plochu nainštalovať lubuntu, ale nedovolí mi to inštalovať cez USB a DVD mechanika je poškodená, chcem len nainštalovať http://www.plop.at na Ubuntu 16.04 LTS, ale neviem, ako na to. Vďaka

    1.    Zástupný obrázok pre Pedro Ruiz Hidalgo dijo

      Omar,

      Ako ste spomenuli, situácia nie je veľmi nádejná: USB nie je povolené a jednotka DVD je poškodená. Tiež však komentujete, že „počítač je starý“, to znamená, že máte nový. Skúste nainštalovať inštaláciu na pevný disk z pracovného počítača a pokúste sa ju nainštalovať z tejto jednotky.

      pozdravy

    2.    Cesar Deba dijo

      Máte počítač a odnímateľnú skrinku? Pripojte pevný disk starého počítača do odnímateľného usb boxu a spustite inštalačný disk.
      Linux a Unix neberú do úvahy hardvér na bootovacej úrovni, pomocou ktorého môžete disk znovu vložiť s nainštalovaným linuxom.

    3.    Omar B.M. dijo

      Ďakujem veľmi pekne, hovorím vám, že to, čo som urobil, bolo prejsť z Ubuntu 16.04 na Lubuntu 16.04 v rámci toho istého operačného systému hehe, a tak môj starý počítač fungoval dobre, pozdravuje z Kolumbie.