Aprenda a calcular a carta DNI usando um script Bash

Depois de satisfazer o requisitos para ser capaz de executar scripts bash, e entenda como definir funções, aprenda como valores de retorno em funções bash. Para isso, vamos criar um pequeno programa ―mas poderoso‖ no Bash que calcular as letras do DNI. Tenho boas notícias: o Bash também pode ser instalado no Windows 10. Com o que se pode agregar todo o poder do Linux em sistemas operacionais, digamos ... diferentes.

Em primeiro lugar, temos que entender como o substrings, que, como em qualquer idioma, tem a possibilidade de retornar partes de uma string desde a indicação da corrente, a posição e o comprimento do segmento. Vejamos um exemplo desse comportamento. Criamos nosso roteiro com

$ touch prueba_substring
$ 

Em seguida, adicionamos o seguinte código com seu editor preferido. Em modo terminal meu editor preferido é mcedit. Mas ultimamente vejo que o nano está ganhando força.

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

Adicionando as permissões e executando assim:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Deve, se tudo correr bem, retornar o seguinte resultado:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Operação de substring

Como você pode ver acima Eu destaquei as linhas 13 a 15 do script e passo para explique o seu código. Echo com o parâmetro "-e" vamos mostrar o próxima linha de personagem, definimos esse personagem no linha 7 e atribuído à variável «ret».

Linha 13: Eu mostro a substring (substring) da variável CHAIN, descrita na linha 8, da posição 12. Sempre começando a contar a partir da posição 0.

Linha 14: De posição 12 da variável CHAIN, eu mostro um segmento de 5. Como você verificará, isso corresponde ao substring "Linux".

Linha 15: eu componho um nova string entre aspas Eu começo como «Eu aprendo em«, para continuar com uma substring da variável CHAIN da posição 31, pegando um segmento de 7: isso corresponde a «Ubunlog».

Funções de postback

O mecanismo de retorno com Bash é produzido pelo comando "return", embora, quando temos que casá-lo com uma variável Bash, ele implemente um mecanismo "estranho", ao qual você tem que se acostumar. Vejamos o seguinte exemplo:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

As funções sempre devem ser definidas antes de usá-las no Bash, portanto, após o cabana declaramos a função soma, na linha 4 definimos por meio de «local» a atribuição do primeiro dos parâmetros ($ 1) para a variável "a". Procedimento idêntico na linha 5, onde atribuímos o segundo parâmetro a ($ 2) à variável «b». Na linha nove, chamamos a função de soma com dois parâmetros que serão convertidos pelo mecanismo descrito no variáveis ​​"a" e "b" e com "return" nós as retornamos adicionadas, como pode ser facilmente visto nas instruções de função.

Atribuímos a variável "retorno" no linha 10 o resultado da execução da função soma.

Depois de estudar e compreender a maneira como retornos de valores e atribuição a variáveis ​​são praticados Vamos ver nosso programa do cálculo de letras DNI com Bash.

Script para calcular letras DNI com 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 carta do nosso DNI corresponde a módulo de número 23. Isto é, nós dividimos o número por 23 y em vez de olhar para o quociente, observamos o resto da divisão. As outras palavras, como números divisíveis por 23 darão zero, a letra que corresponde a ele é o «T», já que isso é a posição 0, como vimos no script acima, todas as substrings começam a contar do zero. Ou seja, com o módulo sempre obteremos números entre 0 (letra "T") e 22 (letra "O"). No Bash, como em outras línguas o módulo é obtido por meio do operador percentual «%».

Em linha 5 definimos as letras em seu pedido. É óbvio, o pedido não pode ser alterado para resultados confiáveis. No se da linha 9 nós estamos perguntando se ao chamar o script houvesse um número como parâmetro. Se não houver parâmetro, solicitamos no teclado com as instruções das linhas 11 a 13. Se o script foi chamado com um número para calcular a ordem na linha 15, atribua este parâmetro à variável «ndni».

Na linha 23, nos referimos à função de módulo por meio do parâmetro de variável «ndni», ou foi coletada como um parâmetro no bash, ou pelo teclado como entrada. Na linha 24, o retorno da função é atribuído à variável «mod». Na linha de 25 mmostramos o número, um travessão e a letra correspondente à posição de acordo com o cálculo do módulo e da substring.

Testando nosso script DNI

$ ./dni 12345678
12345678-Z

O bem,

$ ./dni

 Cálculo DNI, Introduce número

Todos os nossos scripts devem incluir um parâmetro "-a" para o autor e outro "-h" para ajuda e sintaxe. Como vimos em artigos anteriores, ou deixo para você não tornar o código mais complicado.
Espero e espero que este artigo tenha sido de seu interesse.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Omar B. M. dito

    Olá, alguém pode me ajudar, preciso instalar o lubuntu em meu antigo desktop mas não me deixa instalar via USB e o dvd está danificado, só quero instalar http://www.plop.at para Ubuntu 16.04 LTS mas não sei como fazer. Obrigado

    1.    Imagem de Pedro Ruiz Hidalgo placeholder dito

      Omar

      Como você mencionou, a situação não é muito promissora: USB não é permitido e a unidade de DVD está danificada. Mas você também comenta que o "computador é velho", isso significa que você tem um novo. Tente colocar a instalação em um disco rígido de seu computador que esteja funcionando e tente instalá-lo a partir dessa unidade.

      lembranças

    2.    César Deba dito

      Você tem um computador e uma caixa removível? Monte o disco rígido do computador antigo na caixa USB removível e inicie o disco de instalação.
      Linux e Unix não levam em consideração o hardware no nível de boot, com o qual você pode colocar o disco novamente com o linux instalado.

    3.    Omar B. M. dito

      Muito obrigado, digo que o que fiz foi ir do Ubuntu 16.04 para o Lubuntu 16.04 dentro do mesmo sistema operacional hehe e assim meu antigo computador funcionava bem hehe saudações da Colômbia.