Pelajari cara menghitung huruf DNI menggunakan skrip Bash

Setelah memuaskan persyaratan ayat dapat menjalankan skrip bash, dan mengerti bagaimana mendefinisikan fungsi, belajar bagaimana mengembalikan nilai dalam fungsi bash. Untuk ini kita akan membuat program kecil "tapi kuat" di Bash itu hitung huruf-huruf DNI. Saya punya kabar baik: Bash juga bisa diinstal pada Windows 10. Dengan apa yang dapat ditambahkan semua kekuatan Linux dalam sistem operasi, katakanlah ... berbeda.

Pertama-tama, kita harus melakukannya memahami bagaimana substring, yang, seperti dalam bahasa apa pun, memiliki kemungkinan mengembalikan bagian dari sebuah string dari indikasi rantai, posisi dan panjang segmen. Mari kita lihat contoh perilaku ini. Kami membuat skrip kami dengan

$ touch prueba_substring
$ 

Kemudian kami menambahkan kode berikut dengan editor pilihan Anda. Dalam mode terminal editor pilihan saya adalah mcedit. Tapi belakangan ini saya melihat bahwa nano mendapatkan kekuatannya.

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

Menambahkan izin dan menjalankan seperti ini:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Seharusnya, jika semuanya berjalan dengan baik, mengembalikan hasil sebagai berikut:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Operasi Substring

Seperti yang Anda lihat di atas Saya telah menandai baris 13 sampai 15 dari skrip dan langkah ke jelaskan kode Anda. Gema dengan parameter "-e" mari kita tunjukkan karakter baris berikutnya, kami telah mendefinisikan karakter ini di baris 7 dan ditugaskan ke variabel «ret».

Baris 13: Saya menunjukkan substring (BERGANTI) dari variabel CHAIN, dijelaskan pada baris 8, dari posisi 12. Selalu mulai menghitung dari posisi 0.

Baris 14: Dari posisi 12 dari variabel CHAIN, saya menunjukkan segmen 5. Saat Anda akan memverifikasi ini sesuai dengan substring "Linux".

Baris 15: Saya menulis a string baru diapit tanda kutip Saya mulai sebagai «Saya belajar di«, untuk melanjutkan dengan substring dari variabel CHAIN dari posisi 31, mengambil segmen 7: ini sesuai dengan «Ubunlog».

Fungsi postback

Mekanisme pengembalian dengan Bash dihasilkan oleh perintah "return", meskipun, ketika kita harus mencocokkannya dengan variabel Bash, ia mengimplementasikan mekanisme "aneh", yang harus Anda biasakan. Mari kita lihat contoh berikut ini:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Fungsi harus selalu ditentukan sebelum menggunakannya di Bash, oleh karena itu, setelah peristiwa kami mendeklarasikan jumlah fungsi, di baris 4 kita mendefinisikan melalui «lokal» penetapan parameter pertama ($ 1) ke variabel "a". Prosedur identik pada baris 5, di mana kami menetapkan parameter kedua a ($ 2) ke variabel «b». Pada baris sembilan kita memanggil fungsi penjumlahan dengan dua parameter yang akan diubah oleh mekanisme yang dijelaskan dalam variabel "a" dan "b" dan dengan "return" kami mengembalikannya, seperti yang dapat dengan mudah dilihat pada petunjuk fungsi.

Kami menetapkan variabel "kembali" di baris 10 hasil eksekusi fungsi penjumlahan.

Setelah mempelajari dan memahami cara yang digunakan pengembalian nilai dan penugasan ke variabel dipraktekkan Mari kita lihat program kami dari perhitungan huruf DNI dengan Bash.

Script untuk menghitung 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 Itu sesuai dengan modul nomor 23. Ini adalah, kami membagi angka dengan 23 y daripada melihat hasil bagi, kami mengamati sisa divisi. Dengan kata lain, suka angka yang habis dibagi 23 akan menghasilkan nol, surat itu sesuai dengan itu adalah «T», sejak ini adalah posisi 0, seperti yang telah kita lihat pada skrip di atas, semua substring mulai dihitung dari nol. Artinya, dengan modul kita akan selalu mendapatkan angka antara 0 (huruf "T") dan 22 (huruf "O"). Di Bash, seperti dalam bahasa lain modul diperoleh melalui operator persen «%».

Dalam baris 5 kita mendefinisikan huruf dalam pesanan Anda. Sudah jelas, pesanan tidak dapat diubah untuk hasil yang andal. Di baris jika 9 kami bertanya jika saat memanggil skrip ada angka sebagai parameter. Jika tidak ada parameter, kami memintanya melalui keyboard dengan instruksi pada baris 11 sampai 13. Jika skrip dipanggil dengan angka untuk menghitung urutan pada baris 15, tetapkan parameter ini ke variabel «ndni».

Pada baris 23 kita mengacu pada fungsi modulo melalui parameter variabel «ndni», baik itu telah dikumpulkan sebagai parameter di bash, atau dengan keyboard sebagai input. Sejalan 24 kembalinya fungsi tersebut ditetapkan ke variabel «mod». Di jalur 25 mkami menunjukkan nomor, tanda hubung dan huruf yang sesuai dengan posisi sesuai dengan perhitungan modul dan substring.

Menguji skrip DNI kami

$ ./dni 12345678
12345678-Z

O baiklah,

$ ./dni

 Cálculo DNI, Introduce número

Semua skrip kita harus menyertakan parameter "-a" untuk penulis dan "-h" lainnya untuk bantuan dan sintaks. Seperti yang telah kita lihat di artikel sebelumnya atau saya serahkan kepada Anda untuk tidak membuat kode lebih praktis.
Saya berharap dan berharap artikel ini menarik minat Anda.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Umar BM dijo

    Halo, dapatkah seseorang membantu saya, saya perlu menginstal lubuntu ke desktop lama saya tetapi tidak mengizinkan saya menginstal melalui USB dan drive dvd rusak, saya hanya ingin menginstal http://www.plop.at ke Ubuntu 16.04 LTS tetapi saya tidak tahu bagaimana melakukannya. Terima kasih

    1.    Gambar placeholder Pedro Ruiz Hidalgo dijo

      Omar,

      Seperti yang Anda sebutkan, situasinya tidak terlalu menjanjikan: USB tidak diizinkan dan drive DVD rusak. Tapi Anda juga berkomentar bahwa "komputer sudah tua", artinya Anda punya yang baru. Coba letakkan penginstalan pada hard drive dari komputer Anda yang berfungsi dan coba instal dari drive itu.

      salam

    2.    Cesar Deba dijo

      Apakah Anda memiliki komputer dan kotak yang dapat dilepas? Pasang hard drive komputer lama di kotak usb yang dapat dilepas dan mulai disk instalasi.
      Linux dan Unix tidak memperhitungkan perangkat keras pada tingkat boot, yang dengannya Anda dapat meletakkan kembali disk dengan menginstal linux.

    3.    Umar BM dijo

      Terima kasih banyak saya katakan bahwa yang saya lakukan adalah beralih dari Ubuntu 16.04 ke Lubuntu 16.04 dalam sistem operasi yang sama hehe dan komputer lama saya berfungsi dengan baik hehe salam dari Kolombia.