Μάθετε πώς να υπολογίζετε το γράμμα DNI χρησιμοποιώντας ένα σενάριο Bash

Μετά την ικανοποίηση του απαιτήσεις για να μπορείτε να εκτελέσετε σενάρια bashκαι καταλαβαίνω πώς να ορίσετε συναρτήσεις, Μάθε πως επιστρέφουν τιμές στις συναρτήσεις bash. Για αυτό θα δημιουργήσουμε ένα μικρό «αλλά ισχυρό» πρόγραμμα στο Bash αυτό υπολογίστε τα γράμματα του DNI. Έχω καλά νέα: Ο Bash μπορεί επίσης να εγκατασταθεί στα 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 από το σενάριο και βήμα προς εξηγήστε τον κωδικό σας. Echo με το παράμετρος "-e" ας δείξουμε το χαρακτήρας επόμενης γραμμής, έχουμε ορίσει αυτόν τον χαρακτήρα στο γραμμή 7 και αντιστοιχίζεται στη μεταβλητή «ret».

Γραμμή 13: Δείχνω το υπόστρωμα (υπόστρωμα) της μεταβλητής CHAIN, που περιγράφεται στη γραμμή 8, από τη θέση 12. Πάντα αρχίζω να μετράω από τη θέση 0.

Γραμμή 14: Από θέση 12 της μεταβλητής CHAIN, δείχνω ένα τμήμα 5. Όπως θα επιβεβαιώσετε αυτό αντιστοιχεί στο υπόστρωμα "Linux".

Γραμμή 15: Συνθέτω ένα νέα συμβολοσειρά που περικλείεται σε εισαγωγικά Ξεκινώ ως «μαθαίνω στο«, για να συνεχίσω με ένα υπόστρωμα της μεταβλητής CHAIN από τη θέση 31, λαμβάνοντας ένα τμήμα 7: αυτό αντιστοιχεί σε «Ubunlog».

Λειτουργίες επιστροφής

Ο μηχανισμός επιστροφής με το Bash παράγεται από την εντολή "επιστροφή", αν και, όταν πρέπει να τον αντιστοιχίσουμε με μια μεταβλητή Bash, εφαρμόζει έναν "παράξενο" μηχανισμό, στον οποίο πρέπει να συνηθίσετε. Ας δούμε το ακόλουθο παράδειγμα:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Οι συναρτήσεις πρέπει πάντα να καθορίζονται πριν τις χρησιμοποιήσετε στο Bash, επομένως, μετά το δουλεία δηλώνουμε το άθροισμα της συνάρτησης, στη γραμμή 4 ορίζουμε μέσω «τοπικού» την εκχώρηση της πρώτης από τις παραμέτρους ($ 1) στη μεταβλητή "a". Πανομοιότυπη διαδικασία στη γραμμή 5, όπου αντιστοιχίζουμε τη δεύτερη παράμετρο a ($ 2) στη μεταβλητή «b». Στη γραμμή εννέα καλούμε τη συνάρτηση αθροίσματος με δύο παραμέτρους που θα μετατραπούν από τον μηχανισμό που περιγράφεται στο μεταβλητές "a" και "b" και με "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 (γράμμα "T") και 22 (γράμμα "O"). Στο Bash, όπως και σε άλλες γλώσσες η ενότητα λαμβάνεται μέσω του ποσοστού χειριστή «%».

Στην γραμμή 5 ορίζουμε τα γράμματα στην παραγγελία σας. Είναι προφανές, η παραγγελία δεν μπορεί να αλλάξει για αξιόπιστα αποτελέσματα. Στην περίπτωση της γραμμής 9 ρωτάμε αν κατά την κλήση του σεναρίου υπήρχε ένας αριθμός ως παράμετρος. Εάν δεν υπάρχει παράμετρος, το ζητάμε στο πληκτρολόγιο με τις οδηγίες στις γραμμές 11 έως 13. Εάν το σενάριο κλήθηκε με έναν αριθμό για τον υπολογισμό της σειράς στη γραμμή 15, αντιστοιχίστε αυτήν την παράμετρο στη μεταβλητή «ndni».

Στη γραμμή 23 αναφερόμαστε στη συνάρτηση modulo μέσω της παραμέτρου του μεταβλητή «ndni», είτε έχει συλλεχθεί ως παράμετρος στο bash, είτε από πληκτρολόγιο ως είσοδος. Στη γραμμή 24 η επιστροφή της συνάρτησης αποδίδεται στη μεταβλητή «mod». Στη γραμμή των 25 μέτρωνδείχνουμε τον αριθμό, μια παύλα και το γράμμα που αντιστοιχεί στη θέση σύμφωνα με τον υπολογισμό του συντελεστή και του υποστρώματος.

Δοκιμή του σεναρίου DNI

$ ./dni 12345678
12345678-Z

Ω καλά,

$ ./dni

 Cálculo DNI, Introduce número

Όλα τα σενάρια μας πρέπει να περιλαμβάνουν μια παράμετρο "-a" για τον συγγραφέα και ένα άλλο "-h" για βοήθεια και σύνταξη. Όπως έχουμε δει σε προηγούμενα άρθρα ή σας αφήνω να μην κάνετε τον κώδικα πιο δυσκίνητο.
Ελπίζω και ελπίζω αυτό το άρθρο να σας ενδιαφέρει.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   Ομάρ ΒΜ dijo

    Γεια σας, μπορεί κάποιος να με βοηθήσει, πρέπει να εγκαταστήσω το Lubuntu στην παλιά μου επιφάνεια εργασίας, αλλά δεν θα με αφήσει να εγκαταστήσω μέσω USB και η μονάδα DVD είναι κατεστραμμένη, απλώς θέλω να εγκαταστήσω http://www.plop.at στο Ubuntu 16.04 LTS αλλά δεν ξέρω πώς να το κάνω. Ευχαριστώ

    1.    Εικόνα placeholder Pedro Ruiz Hidalgo dijo

      Omar,

      Όπως αναφέρατε, η κατάσταση δεν είναι πολύ ελπιδοφόρα: το usb δεν επιτρέπεται και το dvd drive είναι κατεστραμμένο. Αλλά σχολιάζετε επίσης ότι ο "υπολογιστής είναι παλιός", αυτό σημαίνει ότι έχετε έναν νέο. Δοκιμάστε να τοποθετήσετε την εγκατάσταση σε έναν σκληρό δίσκο από τον υπολογιστή που εργάζεστε και προσπαθήστε να την εγκαταστήσετε από αυτήν τη μονάδα.

      αφορά

    2.    Σέζαρ Ντέλμπα dijo

      Έχετε υπολογιστή και αφαιρούμενο κουτί; Τοποθετήστε το σκληρό δίσκο του παλιού υπολογιστή στο αφαιρούμενο πλαίσιο usb και ξεκινήστε το δίσκο εγκατάστασης.
      Το Linux και το Unix δεν λαμβάνουν υπόψη το υλικό σε επίπεδο εκκίνησης, με το οποίο μπορείτε να τοποθετήσετε ξανά το δίσκο με εγκατεστημένο το linux.

    3.    Ομάρ ΒΜ dijo

      Σας ευχαριστώ πολύ, σας λέω ότι αυτό που έκανα ήταν να πάω από το Ubuntu 16.04 στο Lubuntu 16.04 μέσα στο ίδιο λειτουργικό σύστημα hehe και έτσι λειτουργεί ο παλιός υπολογιστής μου, χαιρετισμούς από την Κολομβία.