เรียนรู้วิธีคำนวณอักษร DNI โดยใช้สคริปต์ Bash

หลังจากพอใจ ความต้องการ สำหรับ สามารถเรียกใช้สคริปต์ทุบตีและเข้าใจ วิธีกำหนดฟังก์ชั่นเรียนรู้วิธีการ คืนค่าในฟังก์ชันทุบตี. สำหรับสิ่งนี้เราจะสร้างโปรแกรม ―but ที่มีประสิทธิภาพขนาดเล็กใน Bash นั้น คำนวณตัวอักษรของ DNI. ฉันมีข่าวดี: ทุบตีก็ทำได้เช่นกัน ติดตั้งบน 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 จากสคริปต์และขั้นตอนที่ อธิบายรหัสของคุณ. ก้อง ที่มีการ พารามิเตอร์ "-e" ให้แสดงไฟล์ อักขระบรรทัดถัดไปเราได้กำหนดอักขระนี้ในไฟล์ บรรทัดที่ 7 และกำหนดให้กับตัวแปร« ret ».

บรรทัดที่ 13: ฉันแสดงสตริงย่อย (สตริงย่อย) ของตัวแปร CHAIN ​​อธิบายไว้ในบรรทัดที่ 8 จากตำแหน่ง 12. เริ่มนับจากตำแหน่ง 0 เสมอ.

บรรทัดที่ 14: จาก ตำแหน่ง 12 ของตัวแปร CHAIN ​​ฉันแสดงส่วนของ 5. ในขณะที่คุณจะตรวจสอบสิ่งนี้สอดคล้องกับไฟล์ สตริงย่อย "Linux".

บรรทัดที่ 15: ฉันเขียนไฟล์ สตริงใหม่ที่อยู่ในเครื่องหมายคำพูด ฉันเริ่มเป็น«ฉันเรียนรู้ใน«เพื่อดำเนินการต่อโดยใช้สตริงย่อยของตัวแปร CHAIN จากตำแหน่ง 31 แบ่งส่วนเป็น 7: สิ่งนี้สอดคล้องกับ «Ubunlog».

ฟังก์ชัน Postback

กลไกการส่งคืนด้วย Bash นั้นสร้างขึ้นโดยคำสั่ง "return" แม้ว่าเมื่อเราต้องจับคู่กับตัวแปร Bash มันจะใช้กลไก "แปลก ๆ " ซึ่งคุณต้องคุ้นเคย ลองดูตัวอย่างต่อไปนี้:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

ต้องกำหนดฟังก์ชันก่อนใช้งานใน Bash เสมอดังนั้นหลังจาก Shebang เราประกาศผลรวมของฟังก์ชันในบรรทัดที่ 4 เรากำหนดโดย«ท้องถิ่น»การกำหนดพารามิเตอร์ตัวแรก ($ 1) ให้กับตัวแปร "a" ขั้นตอนเหมือนกันในบรรทัดที่ 5 โดยที่ เรากำหนดพารามิเตอร์ที่สอง a ($ 2) ให้กับตัวแปร« b ». ในบรรทัดที่เก้าเราเรียกฟังก์ชัน sum ด้วยพารามิเตอร์สองตัวที่จะถูกแปลงโดยกลไกที่อธิบายไว้ใน ตัวแปร "a" และ "b" และด้วย "return" เราจะส่งคืนค่าที่เพิ่มเข้ามาดังที่เห็นได้ง่ายในคำแนะนำฟังก์ชัน

เรากำหนดตัวแปร "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 เรากำหนดตัวอักษร ในการสั่งซื้อของคุณ เห็นได้ชัดว่า ไม่สามารถเปลี่ยนแปลงคำสั่งซื้อได้ เพื่อผลลัพธ์ที่น่าเชื่อถือ ใน if ของบรรทัด 9 เรากำลังถาม หากเมื่อเรียกสคริปต์มีตัวเลขเป็นพารามิเตอร์. หากไม่มีพารามิเตอร์เราขอบนแป้นพิมพ์พร้อมคำแนะนำในบรรทัดที่ 11 ถึง 13 หากสคริปต์ถูกเรียกด้วยตัวเลขเพื่อคำนวณลำดับในบรรทัดที่ 15 ให้กำหนดพารามิเตอร์นี้ให้กับตัวแปร« ndni »

ในบรรทัดที่ 23 เราอ้างถึงฟังก์ชันโมดูโลผ่านพารามิเตอร์ของ ตัวแปร« ndni »ไม่ว่าจะถูกรวบรวมเป็นพารามิเตอร์ใน bash หรือโดยแป้นพิมพ์เป็นอินพุต. ในบรรทัดที่ 24 การกลับมาของฟังก์ชันถูกกำหนดให้กับตัวแปร« mod » บนเส้น 25 มแสดงตัวเลขขีดกลางและตัวอักษรที่สอดคล้องกับตำแหน่งตามการคำนวณโมดูลัสและสตริงย่อย.

ทดสอบสคริปต์ DNI ของเรา

$ ./dni 12345678
12345678-Z

O ดี,

$ ./dni

 Cálculo DNI, Introduce número

สคริปต์ทั้งหมดของเราควรมีพารามิเตอร์ "-a" สำหรับผู้เขียนและอีกตัว "-h" สำหรับความช่วยเหลือและไวยากรณ์ ดังที่เราได้เห็นในบทความก่อนหน้านี้หรือฉันฝากไว้ให้คุณเพื่อหลีกเลี่ยงการทำให้โค้ดยุ่งยากขึ้น
ฉันหวังว่าบทความนี้จะเป็นที่สนใจของคุณ


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   โอมาร์บีเอ็ม dijo

    สวัสดีมีใครช่วยฉันได้บ้างฉันต้องติดตั้ง lubuntu ลงในเดสก์ท็อปเครื่องเก่า แต่มันไม่ยอมให้ฉันติดตั้งผ่าน USB และไดรฟ์ดีวีดีเสียหายฉันแค่ต้องการติดตั้ง http://www.plop.at เป็น Ubuntu 16.04 LTS แต่ไม่รู้จะทำอย่างไร ขอบคุณ

    1.    ภาพแทนของ Pedro Ruiz Hidalgo dijo

      โอมาร์

      ดังที่คุณกล่าวไว้สถานการณ์ไม่น่าเป็นไปได้: ไม่อนุญาตให้ใช้ USB และไดรฟ์ดีวีดีเสียหาย แต่คุณยังแสดงความคิดเห็นว่า "คอมพิวเตอร์เก่า" นั่นหมายความว่าคุณมีเครื่องใหม่ ลองวางการติดตั้งลงในฮาร์ดไดรฟ์จากคอมพิวเตอร์ที่ใช้งานได้และพยายามติดตั้งจากไดรฟ์นั้น

      ความนับถือ

    2.    ซีซาร์ เดลบา dijo

      คุณมีคอมพิวเตอร์และกล่องแบบถอดได้หรือไม่? ติดตั้งฮาร์ดไดรฟ์ของคอมพิวเตอร์เครื่องเก่าในกล่อง usb แบบถอดได้และเริ่มดิสก์การติดตั้ง
      Linux และ Unix ไม่คำนึงถึงฮาร์ดแวร์ที่ระดับการบูตซึ่งคุณสามารถใส่ดิสก์ได้อีกครั้งเมื่อติดตั้ง linux

    3.    โอมาร์บีเอ็ม dijo

      ขอบคุณมากฉันบอกคุณว่าสิ่งที่ฉันทำคือเปลี่ยนจาก Ubuntu 16.04 เป็น Lubuntu 16.04 ภายในระบบปฏิบัติการเดียวกันฮิฮิคอมพิวเตอร์เครื่องเก่าของฉันก็ใช้งานได้ดีสวัสดีทักทายจากโคลอมเบีย