Научете как да изчислявате буквата DNI с помощта на скрипт Bash

След удовлетворяване на изисквания за да можете да стартирате bash скриптове, и разберете как да дефинирам функции, научи как връща стойности в bash функции. За това ще създадем малка „но мощна“ програма в Bash, която изчислете буквите на DNI. Имам добри новини: Баш също може да бъде инсталиран на Windows 10. С това, което може да се добави цялата мощ на Linux в операционните системи, да кажем ... различно.

На първо място, трябва разберете как поднизове, което, както на всеки език, има възможност за връщане на части от низ от индикацията на веригата, позицията и дължината на сегмента. Нека разгледаме пример за това поведение. Създаваме нашия скрипт с

$ touch prueba_substring
$ 

След това добавяме следния код с предпочитания от вас редактор. В терминален режим предпочитаният от мен редактор е mcedit. Но напоследък виждам, че нано набира сила.

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

Добавяне на разрешенията и изпълнение по този начин:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Ако всичко е минало добре, трябва да върне следния резултат:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Операция на подниза

Както можете да видите по-горе Подчертах редове 13 до 15 от скрипта и стъпка към обяснете вашия код. Ехо с параметър "-e" нека покажем знак от следващия ред, ние определихме този знак в ред 7 и се присвоява на променливата «ret».

Ред 13: Показвам подниза (подниз) на променливата CHAIN, описана в ред 8, от позиция 12. Винаги започва да брои от позиция 0.

Ред 14: От позиция 12 на променливата CHAIN, показвам сегмент от 5. Както ще проверите, това съответства на подниз "Linux".

Ред 15: Съставям a нов низ, затворен в кавички Започвам като «научавам в«, за да продължа с подниза на променливата CHAIN от позиция 31, като вземе сегмент от 7: това съответства на «Ubunlog».

Функции за обратно връщане

Механизмът за връщане с Bash се произвежда от командата "return", въпреки че, когато трябва да го съпоставим с променлива Bash, той изпълнява "странен" механизъм, с който трябва да свикнете. Нека разгледаме следния пример:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Функциите трябва винаги да бъдат дефинирани, преди да ги използвате в Bashследователно след шебанг декларираме сумата на функцията, на ред 4 дефинираме посредством «local» присвояването на първия от параметрите ($ 1) към променливата "a". Идентична процедура на ред 5, където присвояваме втория параметър a ($ 2) на променливата «b». В девети ред извикваме функцията за сумиране с два параметъра, които ще бъдат преобразувани от механизма, описан в променливи "a" и "b" и с "return" ги връщаме добавени, както лесно може да се види в инструкциите за функцията.

Присвояваме променливата "return" в ред 10 резултатът от изпълнението на функцията сума.

След изучаване и разбиране на начина, по който практикуват се връщания на стойности и присвояване на променливи Нека да видим нашата програма на изчисляване на DNI букви с Bash.

Скрипт за изчисляване на DNI букви с 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 писмо на нашия DNI отговаря на цифров модул 23. Това е, разделяме числото на 23 y вместо да гледаме коефициента, наблюдаваме останалата част от разделението. Другите думи, като числа, делими на 23, ще дадат нула, буквата, която отговаря на него е «T», тъй като това е позиция 0, както видяхме в скрипта по-горе, всички поднизове започват да броят от нула. Тоест с модула винаги ще получаваме числа между 0 (буква "Т") и 22 (буква "О"). В Bash, както и в други езици модулът се получава с помощта на процентния оператор «%».

В ред 5 определяме буквите по вашата поръчка. Очевидно е, редът не може да бъде променен за надеждни резултати. Във if на реда 9 ние питаме ако при извикване на скрипта като параметър е имало число. В случай че няма параметър, ние го заявяваме чрез клавиатура с инструкциите от редове 11 до 13. Ако скриптът е бил извикан с номер за изчисляване на реда на ред 15, той присвоява този параметър на променливата «ndni».

В ред 23 ние се позоваваме на модулната функция чрез параметъра на променлива «ndni», или е събрана като параметър в bash, или чрез клавиатура като вход. В ред 24 връщането на функцията се присвоява на променливата «mod». На линията 25 mпоказваме числото, тире и буквата, съответстващи на позицията според изчисляването на модула и подниза.

Тестване на нашия DNI скрипт

$ ./dni 12345678
12345678-Z

О, добре,

$ ./dni

 Cálculo DNI, Introduce número

Всички наши скриптове трябва да включват параметър "-a" за автора и друг "-h" за помощ и синтаксис. Както видяхме в предишни статии или оставям на вас да избягвате да правите кода по-тромав.
Надявам се и се надявам, че тази статия е била от ваш интерес.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Омар БМ каза той

    Здравейте, може ли някой да ми помогне, трябва да инсталирам lubuntu на стария си работен плот, но няма да ми позволи да инсталирам през USB и DVD устройството е повредено, просто искам да инсталирам http://www.plop.at към Ubuntu 16.04 LTS, но не знам как да го направя. Благодаря

    1.    Изображение на резервоар на Pedro Ruiz Hidalgo каза той

      Омар,

      Както споменахте, ситуацията не е много обещаваща: usb не е разрешен и DVD устройството е повредено. Но вие също коментирате, че "компютърът е стар", това означава, че имате нов. Опитайте да поставите инсталацията на твърд диск от вашия работещ компютър и да се опитате да я инсталирате от това устройство.

      поздрави

    2.    Цезар Делба каза той

      Имате ли компютър и подвижна кутия? Монтирайте твърдия диск на стария компютър в сменяемата usb кутия и стартирайте инсталационния диск.
      Linux и Unix не вземат предвид хардуера на ниво зареждане, така че можете да поставите диска обратно с инсталиран Linux.

    3.    Омар БМ каза той

      Благодаря ви много, казвам ви, че това, което направих, беше да премина от Ubuntu 16.04 към Lubuntu 16.04 в рамките на същата операционна система хехе и по този начин старият ми компютър работеше добре хехе поздрави от Колумбия.