ഒരു ബാഷ് സ്ക്രിപ്റ്റ് ഉപയോഗിച്ച് DNI അക്ഷരം കണക്കാക്കാൻ പഠിക്കുക

 

തൃപ്തിപ്പെടുത്തിയ ശേഷം ആവശ്യകതകൾ പാര ബാഷ് സ്ക്രിപ്റ്റുകൾ പ്രവർത്തിപ്പിക്കാൻ കഴിയും, മനസിലാക്കുക ഫംഗ്ഷനുകൾ എങ്ങനെ നിർവചിക്കാം, എങ്ങനെയെന്ന് അറിയുക ബാഷ് ഫംഗ്ഷനുകളിൽ റിട്ടേൺ മൂല്യങ്ങൾ. ഇതിനായി ഞങ്ങൾ ബാഷിൽ ഒരു ചെറിയ “എന്നാൽ ശക്തമായ” പ്രോഗ്രാം സൃഷ്ടിക്കാൻ പോകുന്നു DNI യുടെ അക്ഷരങ്ങൾ കണക്കാക്കുക. എനിക്ക് ഒരു സന്തോഷവാർത്തയുണ്ട്: ബാഷിനും കഴിയും വിൻഡോസ് 10 ൽ ഇൻസ്റ്റാൾ ചെയ്യാം. ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളിൽ ലിനക്സിന്റെ എല്ലാ ശക്തിയും ചേർക്കാൻ കഴിയുന്നതിനൊപ്പം, നമുക്ക് പറയാം ... വ്യത്യസ്തമാണ്.

ഒന്നാമതായി, നമ്മൾ ചെയ്യണം എങ്ങനെയെന്ന് മനസ്സിലാക്കുക സബ്സ്ട്രിംഗുകൾ, ഏത് ഭാഷയിലുമെന്നപോലെ, അതിനുള്ള സാധ്യതയുണ്ട് ഒരു സ്ട്രിംഗിന്റെ ഭാഗങ്ങൾ നൽകുക ചെയിനിന്റെ സൂചന, സെഗ്‌മെന്റിന്റെ സ്ഥാനം, ദൈർഘ്യം എന്നിവയിൽ നിന്ന്. ഈ സ്വഭാവത്തിന്റെ ഒരു ഉദാഹരണം നോക്കാം. ഞങ്ങൾ ഞങ്ങളുടെ സ്ക്രിപ്റ്റ് സൃഷ്ടിക്കുന്നു

$ 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 variable എന്ന വേരിയബിളിലേക്ക് നിയുക്തമാക്കി.

വരി 13: ഞാൻ സബ്‌സ്ട്രിംഗ് കാണിക്കുന്നു (സബ്സ്ട്രിംഗ്) CHAIN ​​വേരിയബിളിന്റെ, 8-ാം വരിയിൽ വിവരിച്ചിരിക്കുന്നു, സ്ഥാനം 12 ൽ നിന്ന്. എല്ലായ്പ്പോഴും 0 സ്ഥാനത്ത് നിന്ന് എണ്ണാൻ ആരംഭിക്കുന്നു.

വരി 14: മുതൽ CHAIN ​​വേരിയബിളിന്റെ സ്ഥാനം 12, ഞാൻ 5 ന്റെ ഒരു സെഗ്മെന്റ് കാണിക്കുന്നു. നിങ്ങൾ സ്ഥിരീകരിക്കുന്നതുപോലെ ഇത് "ലിനക്സ്" എന്നതിന് പകരം.

15-ാം വരി: ഞാൻ ഒരു രചിക്കുന്നു പുതിയ സ്ട്രിംഗ് ഉദ്ധരണികളിൽ ഉൾപ്പെടുത്തിയിട്ടുണ്ട് CHAIN ​​വേരിയബിളിന്റെ ഒരു സബ്‌സ്ട്രിംഗുമായി തുടരുന്നതിന് «ഞാൻ പഠിക്കുന്നത് as ആയി ഞാൻ ആരംഭിക്കുന്നു സ്ഥാനം 31 ൽ നിന്ന്, 7 സെഗ്മെന്റ് എടുക്കുന്നു: ഇത് ഇതുമായി യോജിക്കുന്നു "ഉബൻ‌ലോഗ്".

പോസ്റ്റ്ബാക്ക് പ്രവർത്തനങ്ങൾ

ബാഷുമായുള്ള റിട്ടേൺ മെക്കാനിസം നിർമ്മിക്കുന്നത് "റിട്ടേൺ" കമാൻഡ് ആണ്, എന്നിരുന്നാലും, ഞങ്ങൾ ഇത് ഒരു ബാഷ് വേരിയബിളുമായി പൊരുത്തപ്പെടുത്തേണ്ടിവരുമ്പോൾ, അത് ഒരു "വിചിത്രമായ" സംവിധാനം നടപ്പിലാക്കുന്നു, അത് നിങ്ങൾ ഉപയോഗിക്കണം. ഇനിപ്പറയുന്ന ഉദാഹരണം നോക്കാം:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

ബാഷിൽ ഉപയോഗിക്കുന്നതിന് മുമ്പ് പ്രവർത്തനങ്ങൾ എല്ലായ്പ്പോഴും നിർവചിക്കേണ്ടതുണ്ട്അതിനാൽ, അതിനുശേഷം ശെബന്ഗ് 4-ാം വരിയിൽ ഞങ്ങൾ ഫംഗ്ഷൻ തുക പ്രഖ്യാപിക്കുന്നു പരാമീറ്ററുകളിൽ ആദ്യത്തേതിന്റെ അസൈൻമെന്റ് «ലോക്കൽ» വഴി ഞങ്ങൾ നിർവചിക്കുന്നു ($ 1) "a" എന്ന വേരിയബിളിലേക്ക്. അഞ്ചാമത്തെ വരിയിലെ സമാന നടപടിക്രമം, എവിടെ രണ്ടാമത്തെ പാരാമീറ്റർ a ($ 2) വേരിയബിളിന് ഞങ്ങൾ നൽകുന്നു «b». ഒൻപതാം വരിയിൽ ഞങ്ങൾ സംഖ്യയെ രണ്ട് പാരാമീറ്ററുകൾ ഉപയോഗിച്ച് വിളിക്കുന്നു, അത് വിവരിച്ചിരിക്കുന്ന മെക്കാനിസം പരിവർത്തനം ചെയ്യും "a", "b" എന്നീ വേരിയബിളുകളും "റിട്ടേൺ" ഉപയോഗിച്ച് ഞങ്ങൾ അവ ചേർത്തു, ഫംഗ്ഷൻ നിർദ്ദേശങ്ങളിൽ എളുപ്പത്തിൽ കാണാൻ കഴിയും.

ൽ "റിട്ടേൺ" എന്ന വേരിയബിൾ ഞങ്ങൾ നൽകുന്നു വരി 10 ഫംഗ്ഷൻ തുക നടപ്പിലാക്കുന്നതിന്റെ ഫലം.

പഠിച്ച ശേഷം മനസ്സിലാക്കിയ വഴി മൂല്യങ്ങളുടെ വരുമാനവും വേരിയബിളുകളിലേക്കുള്ള അസൈൻമെന്റും പരിശീലിക്കുന്നു ന്റെ ഞങ്ങളുടെ പ്രോഗ്രാം കാണാൻ പോകാം ബാഷിനൊപ്പം DNI അക്ഷരങ്ങളുടെ കണക്കുകൂട്ടൽ.

ബാഷിനൊപ്പം DNI അക്ഷരങ്ങൾ കണക്കാക്കാനുള്ള സ്ക്രിപ്റ്റ്

 

#!/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 ഞങ്ങളുടെ ഡി‌എൻ‌ഐയുടെ കത്ത് എന്നതുമായി യോജിക്കുന്നു നമ്പർ മൊഡ്യൂൾ 23. എസ്റ്റോ എസ്, ഞങ്ങൾ സംഖ്യയെ 23 കൊണ്ട് ഹരിക്കുന്നു y ഘടകത്തെ നോക്കുന്നതിനുപകരം, ബാക്കി ഡിവിഷൻ ഞങ്ങൾ നിരീക്ഷിക്കുന്നു. പോലുള്ള മറ്റ് വാക്കുകൾ 23 കൊണ്ട് ഹരിക്കാവുന്ന സംഖ്യകൾ പൂജ്യം നൽകും, കത്ത് അതിനോട് യോജിക്കുന്നത് «T is ആണ്, ഇതിന് ശേഷം സ്ഥാനം 0 ആണ്, മുകളിലുള്ള സ്ക്രിപ്റ്റിൽ നമ്മൾ കണ്ടതുപോലെ, എല്ലാ സബ്‌സ്ട്രിംഗുകളും പൂജ്യത്തിൽ നിന്ന് എണ്ണാൻ ആരംഭിക്കുന്നു. അതായത്, മൊഡ്യൂളിനൊപ്പം ഞങ്ങൾ എല്ലായ്പ്പോഴും നമ്പറുകൾ നേടും 0 (അക്ഷരം "ടി") നും 22 നും ഇടയിൽ (അക്ഷരം "O"). മറ്റ് ഭാഷകളിലെന്നപോലെ ബാഷിലും മൊഡ്യൂൾ ലഭിക്കുന്നത് ശതമാനം ഓപ്പറേറ്റർ «% by വഴിയാണ്.

എസ് വരി 5 ഞങ്ങൾ അക്ഷരങ്ങൾ നിർവചിക്കുന്നു നിങ്ങളുടെ ഓർഡറിൽ. അത് സ്പഷ്ടമാണ്, ഓർഡർ മാറ്റാൻ കഴിയില്ല വിശ്വസനീയമായ ഫലങ്ങൾക്കായി. വരിയുടെ if ൽ 9 ഞങ്ങൾ ചോദിക്കുന്നു സ്ക്രിപ്റ്റിലേക്ക് വിളിക്കുമ്പോൾ ഒരു പാരാമീറ്ററായി ഒരു നമ്പർ ഉണ്ടായിരുന്നുവെങ്കിൽ. ഒരു പാരാമീറ്ററും ഇല്ലെങ്കിൽ, 11 മുതൽ 13 വരെയുള്ള വരികളിലെ നിർദ്ദേശങ്ങൾ ഉപയോഗിച്ച് ഞങ്ങൾ അത് കീബോർഡിൽ അഭ്യർത്ഥിക്കുന്നു.

23-ാം വരിയിൽ, ന്റെ പാരാമീറ്ററിലൂടെ മൊഡ്യൂളോ ഫംഗ്ഷനെ ഞങ്ങൾ പരാമർശിക്കുന്നു variable ndni variable വേരിയബിൾ, ഒന്നുകിൽ ഇത് ബാഷിലെ ഒരു പാരാമീറ്ററായി അല്ലെങ്കിൽ കീബോർഡ് ഇൻപുട്ടായി ശേഖരിച്ചു. 24-ാം വരിയിൽ ഫംഗ്ഷന്റെ മടങ്ങിവരവ് «mod the എന്ന വേരിയബിളിന് നൽകിയിരിക്കുന്നു. 25 മീറ്റർ ലൈനിൽമോഡുലസിന്റെയും സബ്‌സ്ട്രിംഗിന്റെയും കണക്കുകൂട്ടൽ അനുസരിച്ച് സ്ഥാനത്തിന് അനുയോജ്യമായ നമ്പറും ഡാഷും അക്ഷരവും ഞങ്ങൾ കാണിക്കുന്നു.

ഞങ്ങളുടെ DNI സ്ക്രിപ്റ്റ് പരിശോധിക്കുന്നു

 

$ ./dni 12345678
12345678-Z

ഓ, നന്നായി,

$ ./dni

 Cálculo DNI, Introduce número

ഞങ്ങളുടെ എല്ലാ സ്ക്രിപ്റ്റുകളിലും രചയിതാവിനായി "-a" എന്ന പാരാമീറ്ററും സഹായത്തിനും വാക്യഘടനയ്ക്കും മറ്റൊരു "-h" ഉം ഉൾപ്പെടുത്തണം. മുമ്പത്തെ ലേഖനങ്ങളിൽ ഞങ്ങൾ കണ്ടതുപോലെ അല്ലെങ്കിൽ കോഡ് കൂടുതൽ ബുദ്ധിമുട്ടുള്ളതാക്കുന്നത് ഒഴിവാക്കാൻ ഞാൻ ഇത് നിങ്ങൾക്ക് വിടുന്നു.
ഈ ലേഖനം നിങ്ങളുടെ താൽപ്പര്യമുള്ളതാണെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു, പ്രതീക്ഷിക്കുന്നു.


ലേഖനത്തിന്റെ ഉള്ളടക്കം ഞങ്ങളുടെ തത്ത്വങ്ങൾ പാലിക്കുന്നു എഡിറ്റോറിയൽ എത്തിക്സ്. ഒരു പിശക് റിപ്പോർട്ടുചെയ്യാൻ ക്ലിക്കുചെയ്യുക ഇവിടെ.

4 അഭിപ്രായങ്ങൾ, നിങ്ങളുടേത് വിടുക

നിങ്ങളുടെ അഭിപ്രായം ഇടുക

നിങ്ങളുടെ ഇമെയിൽ വിലാസം പ്രസിദ്ധീകരിച്ചു ചെയ്യില്ല. ആവശ്യമായ ഫീൽഡുകൾ കൊണ്ട് അടയാളപ്പെടുത്തുന്നു *

*

*

  1. ഡാറ്റയുടെ ഉത്തരവാദിത്തം: മിഗുവൽ ഏഞ്ചൽ ഗാറ്റൻ
  2. ഡാറ്റയുടെ ഉദ്ദേശ്യം: സ്പാം നിയന്ത്രിക്കുക, അഭിപ്രായ മാനേജുമെന്റ്.
  3. നിയമസാധുത: നിങ്ങളുടെ സമ്മതം
  4. ഡാറ്റയുടെ ആശയവിനിമയം: നിയമപരമായ ബാധ്യതയല്ലാതെ ഡാറ്റ മൂന്നാം കക്ഷികളുമായി ആശയവിനിമയം നടത്തുകയില്ല.
  5. ഡാറ്റ സംഭരണം: ഒസെന്റസ് നെറ്റ്‌വർക്കുകൾ (ഇയു) ഹോസ്റ്റുചെയ്യുന്ന ഡാറ്റാബേസ്
  6. അവകാശങ്ങൾ: ഏത് സമയത്തും നിങ്ങളുടെ വിവരങ്ങൾ പരിമിതപ്പെടുത്താനും വീണ്ടെടുക്കാനും ഇല്ലാതാക്കാനും കഴിയും.

  1.   ഒമർ ബി.എം. പറഞ്ഞു

    ഹലോ, ആരെങ്കിലും എന്നെ സഹായിക്കാമോ, എന്റെ പഴയ ഡെസ്ക്ടോപ്പിലേക്ക് എനിക്ക് ലുബുണ്ടു ഇൻസ്റ്റാൾ ചെയ്യേണ്ടതുണ്ട്, പക്ഷേ ഇത് യുഎസ്ബി വഴി ഇൻസ്റ്റാൾ ചെയ്യാൻ എന്നെ അനുവദിക്കില്ല കൂടാതെ ഡിവിഡി ഡ്രൈവ് കേടായി, എനിക്ക് ഇൻസ്റ്റാൾ ചെയ്യണം http://www.plop.at ഉബുണ്ടുവിലേക്ക് 16.04 എൽ‌ടി‌എസ് പക്ഷേ അത് എങ്ങനെ ചെയ്യണമെന്ന് എനിക്കറിയില്ല. നന്ദി

    1.    പെഡ്രോ റൂയിസ് ഹിഡാൽഗോ പ്ലെയ്‌സ്‌ഹോൾഡർ ചിത്രം പറഞ്ഞു

      ഒമർ,

      നിങ്ങൾ സൂചിപ്പിച്ചതുപോലെ, സാഹചര്യം വളരെ പ്രതീക്ഷ നൽകുന്നതല്ല: usb അനുവദനീയമല്ല കൂടാതെ ഡിവിഡി ഡ്രൈവ് കേടായി. "കമ്പ്യൂട്ടർ പഴയതാണ്" എന്നും നിങ്ങൾ അഭിപ്രായപ്പെടുന്നു, അതിനർത്ഥം നിങ്ങൾക്ക് പുതിയൊരെണ്ണം ഉണ്ടെന്നാണ്. നിങ്ങളുടെ പ്രവർത്തിക്കുന്ന കമ്പ്യൂട്ടറിൽ നിന്ന് ഒരു ഹാർഡ് ഡ്രൈവിൽ ഇൻസ്റ്റാളേഷൻ സ്ഥാപിച്ച് ആ ഡ്രൈവിൽ നിന്ന് ഇൻസ്റ്റാൾ ചെയ്യാൻ ശ്രമിക്കുക.

      നന്ദി!

    2.    സീസർ ഡെൽബ പറഞ്ഞു

      നിങ്ങൾക്ക് കമ്പ്യൂട്ടറും നീക്കംചെയ്യാവുന്ന ബോക്സും ഉണ്ടോ? നീക്കംചെയ്യാവുന്ന യുഎസ്ബി ബോക്സിൽ പഴയ കമ്പ്യൂട്ടറിന്റെ ഹാർഡ് ഡ്രൈവ് മ Mount ണ്ട് ചെയ്ത് ഇൻസ്റ്റലേഷൻ ഡിസ്ക് ആരംഭിക്കുക.
      ലിനക്സും യുണിക്സും ബൂട്ട് ലെവലിൽ ഹാർഡ്‌വെയർ കണക്കിലെടുക്കുന്നില്ല, അതിലൂടെ നിങ്ങൾക്ക് ലിനക്സ് ഇൻസ്റ്റാൾ ചെയ്തുകൊണ്ട് ഡിസ്ക് വീണ്ടും ഇടാം.

    3.    ഒമർ ബി.എം. പറഞ്ഞു

      വളരെ നന്ദി, ഞാൻ ചെയ്തത് ഉബുണ്ടു 16.04 ൽ നിന്ന് ലുബുണ്ടു 16.04 ലേക്ക് ഒരേ ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിനുള്ളിൽ പോകുകയാണെന്നും അതിനാൽ എന്റെ പഴയ കമ്പ്യൂട്ടർ കൊളംബിയയിൽ നിന്നുള്ള ആശംസകൾ നന്നായി പ്രവർത്തിക്കുന്നുണ്ടെന്നും ഞാൻ നിങ്ങളോട് പറയുന്നു.