Apprenez à calculer la lettre DNI à l'aide d'un script Bash

Après avoir satisfait le exigences pour être capable d'exécuter des scripts bash, et comprend comment définir des fonctions, apprendre retourne les valeurs dans les fonctions bash. Pour cela, nous allons créer un petit programme «mais puissant» dans Bash qui calculer les lettres du DNI. J'ai de bonnes nouvelles: Bash peut aussi être installé sur Windows 10. Avec ce qui peut être ajouté toute la puissance de Linux dans les systèmes d'exploitation, disons ... différent.

Tout d'abord, nous devons comprendre comment le sous-chaînes, qui, comme dans n'importe quelle langue, a la possibilité de renvoyer des parties d'une chaîne à partir de l'indication de la chaîne, de la position et de la longueur du segment. Regardons un exemple de ce comportement. Nous créons notre script avec

$ touch prueba_substring
$ 

Ensuite, nous ajoutons le code suivant avec votre éditeur préféré. En mode terminal mon éditeur préféré est mcedit. Mais dernièrement je vois que le nano gagne en force.

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

Ajout des autorisations et exécution comme ceci:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Il devrait, si tout s'est bien passé, renvoyer le résultat suivant:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Opération de sous-chaîne

Comme vous pouvez le voir ci-dessus J'ai mis en évidence les lignes 13 à 15 du script et de l'étape à expliquer votre code. Écho avec la paramètre "-e" montrons le caractère de la ligne suivante, nous avons défini ce caractère dans le ligne 7 et affectée à la variable «ret».

Ligne 13: je montre la sous-chaîne (sous-chaîne) de la variable CHAIN, décrite à la ligne 8, à partir de la position 12. Commencer toujours à compter à partir de la position 0.

Ligne 14: depuis position 12 de la variable CHAIN, je montre un segment de 5. Comme vous le vérifierez, cela correspond à la sous-chaîne "Linux".

Ligne 15: je compose un nouvelle chaîne entre guillemets Je commence par «j'apprends en», pour continuer avec une sous-chaîne de la variable CHAIN à partir de la position 31, en prenant un segment de 7: cela correspond à «Ubunlog».

Fonctions de publication

Le mécanisme de retour avec Bash est produit par la commande "return", bien que, lorsque nous devons le faire correspondre à une variable Bash, il implémente un mécanisme "étrange" auquel il faut s'habituer. Regardons l'exemple suivant:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Les fonctions doivent toujours être définies avant de les utiliser dans Bash, par conséquent, après le case nous déclarons la fonction somme, à la ligne 4 on définit au moyen de «local» l'affectation du premier des paramètres ($ 1) à la variable "a". Procédure identique à la ligne 5, où on affecte le deuxième paramètre a ($ 2) à la variable «b». À la ligne neuf, nous appelons la fonction somme avec deux paramètres qui seront convertis par le mécanisme décrit dans le les variables "a" et "b" et avec "return" nous les retournons ajoutées, comme on peut facilement le voir dans les instructions de fonctionnement.

Nous attribuons la variable "return" dans le ligne 10 le résultat de l'exécution de la fonction somme.

Après avoir étudié et compris la manière dont les retours de valeurs et l'affectation aux variables sont pratiqués Allons voir notre programme du calcul des lettres DNI avec Bash.

Script pour calculer les lettres DNI avec 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 lettre de notre DNI correspond à module numéro 23. C'est, nous divisons le nombre par 23 y au lieu de regarder le quotient, nous observons le reste de la division. Les autres mots, comme les nombres divisibles par 23 donneront zéro, la lettre qui lui correspond est le «T», depuis cela est la position 0, comme nous l'avons vu dans le script ci-dessus, toutes les sous-chaînes commencent à compter à partir de zéro. Autrement dit, avec le module, nous obtiendrons toujours des nombres entre 0 (lettre "T") et 22 (lettre "O"). En bash, comme dans d'autres langues le module est obtenu au moyen de l'opérateur de pourcentage «%».

Sur ligne 5 nous définissons les lettres dans votre commande. C'est évident, l'ordre ne peut pas être modifié pour des résultats fiables. Dans le si de la ligne 9 nous demandons si lors de l'appel du script il y avait un nombre comme paramètre. S'il n'y a pas de paramètre, nous le demandons au clavier avec les instructions des lignes 11 à 13. Si le script a été appelé avec un numéro pour calculer la commande à la ligne 15, affectez ce paramètre à la variable «ndni».

À la ligne 23, nous nous référons à la fonction modulo via le paramètre de variable «ndni», soit elle a été collectée en paramètre dans bash, soit par clavier en entrée. En ligne 24 le retour de la fonction est affecté à la variable «mod». Sur la ligne des 25 mon montre le nombre, un tiret et la lettre correspondant à la position selon le calcul du module et de la sous-chaîne.

Tester notre script DNI

$ ./dni 12345678
12345678-Z

Ou bien,

$ ./dni

 Cálculo DNI, Introduce número

Tous nos scripts doivent inclure un paramètre "-a" pour l'auteur et un autre "-h" pour l'aide et la syntaxe. Comme nous l'avons vu dans les articles précédents ou je vous laisse le soin de ne pas alourdir le code.
J'espère et j'espère que cet article a été de votre intérêt.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   Omar B.M. dit

    Bonjour, quelqu'un peut-il m'aider, j'ai besoin d'installer lubuntu sur mon ancien bureau mais il ne me laissera pas installer via USB et le lecteur DVD est endommagé, je veux juste installer http://www.plop.at à Ubuntu 16.04 LTS mais je ne sais pas comment le faire. Merci

    1.    Image de balise Pedro Ruiz Hidalgo dit

      Omar,

      Comme vous l'avez mentionné, la situation n'est pas très prometteuse: l'USB n'est pas autorisé et le lecteur DVD est endommagé. Mais vous commentez également que "l'ordinateur est ancien", cela signifie que vous en avez un nouveau. Essayez de mettre l'installation sur un disque dur à partir de votre ordinateur de travail et essayez de l'installer à partir de ce disque.

      salutations

    2.    César Delba dit

      Avez-vous un ordinateur et un boîtier amovible? Montez le disque dur de l'ancien ordinateur dans la boîte USB amovible et démarrez le disque d'installation.
      Linux et Unix ne prennent pas en compte le matériel au niveau du démarrage, avec lequel vous pouvez remettre le disque avec linux installé.

    3.    Omar B.M. dit

      Merci beaucoup je vous dis que ce que j'ai fait était de passer d'Ubuntu 16.04 à Lubuntu 16.04 dans le même système d'exploitation hehe et c'est ainsi que mon ancien ordinateur fonctionnait bien hehe salutations de Colombie.