Naučite kako izračunati DNI slovo pomoću Bash skripte

Nakon zadovoljenja zahtjevi za biti u mogućnosti pokretati bash skripte, i razumjeti kako definirati funkcije, nauči kako vratiti vrijednosti u bash funkcijama. Za to ćemo stvoriti mali "ali moćan" program u Bashu koji izračunati slova DNI-a. Imam dobre vijesti: I Bash može biti instaliran na Windows 10. Uz ono što se može dodati sva snaga Linuxa u operativnim sustavima, recimo ... drugačije.

Prije svega, moramo razumjeti kako podnizove, koji, kao i u bilo kojem jeziku, ima mogućnost vratiti dijelove niza od naznake lanca, položaja i duljine segmenta. Pogledajmo primjer takvog ponašanja. Stvaramo našu skriptu sa

$ touch prueba_substring
$ 

Zatim dodamo sljedeći kod s vašim preferiranim uređivačem. U modulu terminala moj omiljeni urednik je mcedit. Ali u posljednje vrijeme vidim da nano dobiva na snazi.

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

Dodavanje dozvola i izvršavanje ovako:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Trebalo bi, ako je sve prošlo u redu, vratiti sljedeći rezultat:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Operacija podniza

Kao što vidite gore Istaknuo sam retke 13 do 15 od skripte i koraka do objasnite svoj kod. Odjek s parametar "-e" dopustimo pokazati znak sljedećeg retka, ovaj smo lik definirali u redak 7 i dodjeljuje se varijabli «ret».

Redak 13: Prikazujem podniz (podniz) varijable CHAIN, opisane u retku 8, s položaja 12. Uvijek počinje računati s položaja 0.

Redak 14: Od položaj 12 varijable CHAIN, prikazujem segment 5. Kao što ćete provjeriti, ovo odgovara podniz "Linux".

Redak 15: Sastavljam a novi niz zatvoren u navodnike Počinjem kao «učim u», da bih nastavio s podnizom varijable CHAIN s položaja 31, uzimajući segment 7: ovo odgovara «Ubunlog».

Postback funkcije

Mehanizam povratka s Bashom proizvodi naredba "return", iako, kad ga moramo uskladiti s varijablom Bash, on implementira "čudan" mehanizam, na koji se morate naviknuti. Pogledajmo sljedeći primjer:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Funkcije moraju uvijek biti definirane prije korištenja u Bashu, dakle, nakon šajkača deklariramo zbroj funkcije, u retku 4 definiramo pomoću «lokalnog» dodjelu prvog od parametara ($ 1) na varijablu "a". Identičan postupak na liniji 5, gdje dodijelimo drugi parametar a ($ 2) varijabli «b». U devetom retku nazivamo funkciju zbroja s dva parametra koja će se pretvoriti mehanizmom opisanim u varijable "a" i "b", a uz "return" vraćamo ih dodane, što se lako može vidjeti u uputama za funkciju.

Varijablu "return" dodjeljujemo u redak 10 rezultat izvršenja zbroja funkcije.

Nakon proučavanja i razumijevanja načina na koji Vježbaju se povrati vrijednosti i dodjeljivanje varijablama Idemo vidjeti naš program izračun DNI slova s ​​Bashom.

Skripta za izračunavanje DNI slova 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 pismo našeg DNI-a Odgovara brojevni modul 23. Ovo je, broj dijelimo s 23 y umjesto gledanja količnika, promatramo ostatak podjele. Druge riječi, poput brojevi djeljivi sa 23 dat će nulu, slovo koje odgovara joj je «T», budući da ovo je položaj 0, kao što smo vidjeli u gornjem scenariju, svi podnizovi počinju brojati od nule. Odnosno, s modulom ćemo uvijek dobiti brojeve između 0 (slovo "T") i 22 (slovo "O"). U Bashu, kao i u drugim jezicima modul se dobiva pomoću postotnog operatora «%».

u redak 5 definiramo slova po tvojoj narudžbi. Očito je, redoslijed se ne može mijenjati za pouzdane rezultate. U liniji if 9 pitamo ako je prilikom pozivanja skripte kao parametar bio broj. Ako nema parametra, tražimo ga na tipkovnici s uputama na redovima od 11 do 13. Ako je skripta pozvana brojem za izračunavanje redoslijeda u retku 15, dodijelite ovaj parametar varijabli «ndni».

U retku 23 upućujemo na funkciju modula kroz parametar varijabla «ndni», ili je prikupljena kao parametar u bashu, ili pomoću tipkovnice kao ulaz. U retku 24 povratak funkcije dodjeljuje se varijabli «mod». Na liniji od 25 mprikazujemo broj, crticu i slovo koje odgovara položaju prema izračunu modula i podniza.

Testiranje naše DNI skripte

$ ./dni 12345678
12345678-Z

Pa dobro,

$ ./dni

 Cálculo DNI, Introduce número

Sve naše skripte trebaju sadržavati parametar "-a" za autora i još jedan "-h" za pomoć i sintaksu. Kao što smo vidjeli u prethodnim člancima ili prepuštam vama da izbjegnete stvaranje koda glomaznije.
Nadam se i nadam se da vas je ovaj članak zanimao.


4 komentara, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   Omar B.M. dijo

    Pozdrav, može li mi netko pomoći, moram instalirati lubuntu na svoju staru radnu površinu, ali neće mi dopustiti instalaciju putem USB-a, a DVD pogon je oštećen, samo želim instalirati http://www.plop.at na Ubuntu 16.04 LTS, ali ne znam kako to učiniti. Hvala

    1.    Slika rezerviranog mjesta Pedro Ruiz Hidalgo dijo

      Omar,

      Kao što ste spomenuli, situacija nije previše obećavajuća: usb nije lijev i DVD pogon oštećen. Ali također komentirate da je "računalo staro", to znači da imate novo. Pokušajte instalirati instalaciju na tvrdi disk s radnog računala i pokušati je instalirati s tog pogona.

      pozdravi

    2.    Cesar Deba dijo

      Imate li računalo i prijenosnu kutiju? Postavite tvrdi disk starog računala u prijenosni USB pretinac i pokrenite instalacijski disk.
      Linux i Unix ne uzimaju u obzir hardver na razini pokretanja, s kojim možete ponovo staviti disk s instaliranim Linuxom.

    3.    Omar B.M. dijo

      Puno vam hvala, kažem vam da sam ono što sam učinio bio da sam prešao s Ubuntu 16.04 na Lubuntu 16.04 unutar istog operativnog sustava hehe i tako je moje staro računalo radilo dobro hehe pozdrav iz Kolumbije.