Pelajari cara mengira huruf DNI menggunakan skrip Bash

Setelah memuaskan hati keperluan perenggan dapat menjalankan skrip bash, dan faham cara menentukan fungsi, belajar bagaimana mengembalikan nilai dalam fungsi bash. Untuk ini kita akan membuat program kecil "tapi kuat" di Bash itu hitung huruf DNI. Saya mempunyai berita baik: Bash juga boleh dipasang pada Windows 10. Dengan apa yang dapat ditambahkan semua kekuatan Linux dalam sistem operasi, katakanlah ... berbeza.

Pertama sekali, kita mesti memahami bagaimana substring, yang, seperti dalam bahasa apa pun, memiliki kemungkinan mengembalikan bahagian tali dari petunjuk rantai, kedudukan dan panjang segmen. Mari lihat contoh tingkah laku ini. Kami membuat skrip kami dengan

$ touch prueba_substring
$ 

Kemudian kami menambah kod berikut dengan editor pilihan anda. Dalam mod terminal editor pilihan saya adalah mcedit. Tetapi akhir-akhir ini saya melihat bahawa nano semakin kuat.

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

Menambah kebenaran dan melaksanakan seperti ini:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Sekiranya semuanya berjalan lancar, hasilnya adalah berikut:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Operasi Substring

Seperti yang anda lihat di atas Saya telah menyerlahkan garis 13 hingga 15 dari skrip dan langkah ke terangkan kod anda. Echo dengan parameter "-e" mari tunjukkan watak baris seterusnya, kita telah menentukan watak ini dalam baris 7 dan diberikan kepada pemboleh ubah «ret».

Baris 13: Saya menunjukkan substring (subrentetan) dari pemboleh ubah CHAIN, yang dijelaskan dalam baris 8, dari kedudukan 12. Sentiasa mula mengira dari kedudukan 0.

Baris 14: Dari kedudukan 12 pemboleh ubah RANTAI, saya menunjukkan segmen 5. Seperti yang anda akan mengesahkan ini sesuai dengan substring "Linux".

Baris 15: Saya mengarang a rentetan baru dilampirkan dalam petikan Saya bermula sebagai «Saya belajar di«, untuk meneruskan substring pembolehubah CHAIN dari kedudukan 31, mengambil segmen 7: ini sesuai dengan «Ubunlog».

Fungsi postback

Mekanisme pengembalian dengan Bash dihasilkan oleh perintah "kembali", walaupun, ketika kita harus mencocokkannya dengan pemboleh ubah Bash, ini menerapkan mekanisme "aneh", yang harus Anda terbiasa. Mari lihat contoh berikut:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Fungsi mesti selalu ditentukan sebelum menggunakannya dalam Bash, oleh itu, selepas shebang kami menyatakan jumlah fungsi, pada baris 4 kami menentukan dengan kaedah «tempatan» penugasan parameter pertama ($ 1) ke pemboleh ubah "a". Prosedur yang sama pada baris 5, di mana kami memberikan parameter kedua a ($ 2) kepada pemboleh ubah «b». Pada baris sembilan kita memanggil fungsi jumlah dengan dua parameter yang akan ditukarkan oleh mekanisme yang dijelaskan dalam pemboleh ubah "a" dan "b" dan dengan "return" kami mengembalikannya ditambahkan, seperti yang dapat dilihat dengan mudah dalam arahan fungsi.

Kami memberikan pemboleh ubah "return" di baris 10 hasil pelaksanaan jumlah fungsi.

Setelah mengkaji dan memahami cara di mana pengembalian nilai dan penugasan kepada pemboleh ubah diamalkan Mari pergi untuk melihat program kami dari pengiraan huruf DNI dengan Bash.

Skrip untuk mengira huruf DNI dengan 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 surat DNI kami sepadan dengan modul nombor 23. Ini adalah, kami membahagikan nombor dengan 23 y bukannya melihat hasilnya, kita memerhatikan bahagian yang lain. Perkataan lain, seperti nombor dibahagi dengan 23 akan memberi sifar, surat itu sepadan dengan itu adalah «T», sejak ini ialah kedudukan 0, seperti yang telah kita lihat dalam skrip di atas, semua substring mula dikira dari sifar. Maksudnya, dengan modul kita akan selalu memperoleh nombor antara 0 (huruf "T") dan 22 (huruf "O"). Di Bash, seperti bahasa lain modul tersebut diperoleh dengan menggunakan peratus operator «%».

Dalam baris 5 kita menentukan huruf mengikut pesanan anda. Sudah jelas, pesanan tidak boleh diubah untuk hasil yang boleh dipercayai. Dalam talian sekiranya 9 kita bertanya jika memanggil skrip ada nombor sebagai parameter. Sekiranya tidak ada parameter, kami memintanya dengan papan kekunci dengan petunjuk dari baris 11 hingga 13. Jika skrip dipanggil dengan nombor untuk menghitung urutan pada baris 15, ia menetapkan parameter ini ke pemboleh ubah «ndni».

Pada baris 23 kita merujuk pada fungsi modulo melalui parameter pemboleh ubah «ndni», sama ada telah dikumpulkan sebagai parameter dalam bash, atau oleh papan kekunci sebagai input. Pada baris 24, pengembalian fungsi ditugaskan pada pemboleh ubah «mod». Pada garis 25 mkami menunjukkan nombor, tanda hubung dan huruf yang sesuai dengan kedudukan mengikut pengiraan modulus dan substring.

Menguji skrip DNI kami

$ ./dni 12345678
12345678-Z

Wah,

$ ./dni

 Cálculo DNI, Introduce número

Semua skrip kami harus menyertakan parameter "-a" untuk pengarang dan "-h" lain untuk bantuan dan sintaks. Seperti yang telah kita lihat dalam artikel sebelumnya atau saya menyerahkan kepada anda untuk mengelakkan membuat kod lebih membebankan.
Saya berharap dan berharap artikel ini menarik minat anda.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Omar B.M. kata

    Halo, bolehkah seseorang menolong saya, saya perlu memasang lubuntu ke desktop lama saya tetapi ia tidak akan membiarkan saya memasang melalui USB dan pemacu dvd rosak, saya hanya mahu memasang http://www.plop.at ke Ubuntu 16.04 LTS tetapi saya tidak tahu bagaimana untuk melakukannya. Terima kasih

    1.    Gambar placeholder Pedro Ruiz Hidalgo kata

      Omar,

      Seperti yang anda nyatakan, situasinya tidak begitu menjanjikan: usb tidak dibenarkan dan pemacu dvd rosak. Tetapi anda juga memberi komen bahawa "komputer sudah lama", itu bermaksud anda mempunyai komputer baru. Cuba pasangkan pemasangan pada cakera keras dari komputer yang berfungsi dan cuba pasangkannya dari pemacu itu.

      salam

    2.    Cesar Deba kata

      Adakah anda mempunyai komputer dan kotak yang boleh ditanggalkan? Pasang cakera keras komputer lama di kotak usb yang boleh ditanggalkan dan mulakan cakera pemasangan.
      Linux dan Unix tidak mengambil kira perkakasan pada tahap boot, dengan mana anda boleh meletakkan cakera lagi dengan linux dipasang.

    3.    Omar B.M. kata

      Terima kasih banyak saya memberitahu anda bahawa apa yang saya lakukan adalah pergi dari Ubuntu 16.04 ke Lubuntu 16.04 dalam sistem operasi yang sama hehe dan begitulah cara komputer lama saya berfungsi dengan baik hehe salam dari Colombia.