Alamin kung paano makalkula ang titik ng DNI gamit ang isang Bash script

Matapos masiyahan ang requisitos para makapagpatakbo ng bash script, at maunawaan kung paano tukuyin ang mga pagpapaandar, Matuto kung paano ibalik ang mga halaga sa pag-andar ng bash. Para dito lilikha kami ng isang maliit na ―pero malakas na program sa Bash na kalkulahin ang mga titik ng DNI. Mayroon akong magandang balita: Maaari rin si Bash mai-install sa Windows 10. Sa kung ano ang maaaring maidagdag ang lahat ng lakas ng Linux sa mga operating system, sabihin nating ... iba.

Una sa lahat, kailangan natin maunawaan kung paano ang mga substring, na, tulad ng sa anumang wika, may posibilidad na ibalik ang mga bahagi ng isang string mula sa pahiwatig ng kadena, ang posisyon at ang haba ng segment. Tingnan natin ang isang halimbawa ng pag-uugaling ito. Lumilikha kami ng aming script sa

$ touch prueba_substring
$ 

Pagkatapos ay idinagdag namin ang sumusunod na code sa iyong ginustong editor. Sa terminal mode ang aking ginustong editor ay mcedit. Ngunit nitong huli nakita ko na ang nano ay lumalakas.

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

Pagdaragdag ng mga pahintulot at pagpapatupad ng tulad nito:

$ chmod +x prueba_substring
$ ./prueba_substring
$

Dapat, kung naging maayos ang lahat, ibalik ang sumusunod na resulta:

 Linux Con Ubuntu y Ubunlog, claro!

 Linux

 Aprendo en Ubunlog

Pagpapatakbo ng Substring

Tulad ng nakikita mo sa itaas Na-highlight ko ang mga linya 13 hanggang 15 ng script at hakbang sa ipaliwanag ang iyong code. alingawngaw sa parameter na "-e" hinahayaan ipakita ang susunod na character na linya, tinukoy namin ang tauhang ito sa linya 7 at nakatalaga sa variable «ret».

Linya 13: Ipinapakita ko ang substring (substring) ng variable na CHAIN, na inilarawan sa linya 8, mula sa posisyon 12. Palaging nagsisimulang bilangin mula sa posisyon 0.

Linya 14: Mula sa posisyon 12 ng variable na CHAIN, nagpapakita ako ng isang segment ng 5. Tulad ng iyong mapatunayan na tumutugma ito sa substring "Linux".

Linya 15: Bumubuo ako ng a bagong string na nakapaloob sa mga quote Nagsisimula ako bilang «natututo ako sa«, upang magpatuloy sa isang substring ng variable na CHAIN mula sa posisyon 31, kumukuha ng isang segment ng 7: tumutugma ito sa «Ubunlog».

Mga pagpapaandar sa postback

Ang mekanismo ng pagbabalik na may Bash ay ginawa ng utos na "return", bagaman, kapag kailangan naming itugma ito sa isang variable na Bash, nagpapatupad ito ng isang "kakaibang" mekanismo, kung saan kailangan mong masanay. Tingnan natin ang sumusunod na halimbawa:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

Dapat laging tukuyin ang mga pagpapaandar bago gamitin ang mga ito sa Bash, samakatuwid, pagkatapos ng shebang idineklara namin ang kabuuan ng pagpapaandar, sa linya 4 tinukoy namin sa pamamagitan ng «lokal» ang pagtatalaga ng una sa mga parameter ($ 1) sa variable na "a". Kaparehong pamamaraan sa linya 5, kung saan itinalaga namin ang pangalawang parameter a ($ 2) sa variable «b». Sa linya ng siyam na tinatawag namin ang kabuuan ng pag-andar na may dalawang mga parameter na mababago ng mekanismo na inilarawan sa variable na "a" at "b" at sa "pagbabalik" ibinalik namin ang mga ito na idinagdag, tulad ng madaling makita sa mga tagubilin sa pag-andar.

Itinalaga namin ang variable na "return" sa linya 10 ang resulta ng pagpapatupad ng kabuuan ng pag-andar.

Matapos mapag-aralan at maunawaan ang paraan kung saan isinasagawa ang mga pagbalik ng halaga at pagtatalaga sa mga variable Halina't tingnan natin ang ating programa ng pagkalkula ng mga titik ng DNI na may Bash.

Script upang makalkula ang mga titik ng DNI na may 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 liham ng aming DNI Ito ay tumutugma sa numero ng module 23. Ito ay, hinati natin ang bilang sa 23 y sa halip na tingnan ang quient, sinusunod namin ang natitirang bahagi ng dibisyon. Ang iba pang mga salita, tulad ng ang mga numero na mahati ng 23 ay magbibigay ng zero, ang liham na tumutugma dito ay ang «T», simula nito ay posisyon 0, tulad ng nakita natin sa script sa itaas, ang lahat ng mga substring ay nagsisimulang bilangin mula sa zero. Iyon ay, sa modyul na palagi kaming makakakuha ng mga numero sa pagitan ng 0 (letrang "T") at 22 (letrang "O"). Sa Bash, tulad ng sa ibang mga wika ang module ay nakuha sa pamamagitan ng porsyento ng operator «%».

Sa linya 5 tinutukoy namin ang mga titik sa order mo. Halata naman, hindi mababago ang order para sa maaasahang mga resulta. Sa kung ng linya 9 nagtatanong kami kung kapag tumatawag sa script ay mayroong isang bilang isang parameter. Kung sakaling walang parameter, hinihiling namin ito sa pamamagitan ng keyboard kasama ang mga tagubilin mula sa mga linya 11 hanggang 13. Kung ang script ay tinawag na may isang numero upang makalkula ang pagkakasunud-sunod sa linya 15, itinalaga nito ang parameter na ito sa variable na «ndni».

Sa linya 23 tinutukoy namin ang pagpapaandar ng modulo sa pamamagitan ng parameter ng variable «ndni», alinman ay nakolekta bilang isang parameter sa bash, o sa pamamagitan ng keyboard bilang input. Sa linya 24 ang pagbabalik ng pag-andar ay itinalaga sa variable «mod». Sa linya na 25 mipinapakita namin ang numero, isang dash at ang titik na naaayon sa posisyon ayon sa pagkalkula ng modulus at ang substring.

Pagsubok sa aming iskrip sa DNI

$ ./dni 12345678
12345678-Z

O well,

$ ./dni

 Cálculo DNI, Introduce número

Ang lahat ng aming mga script ay dapat na may kasamang isang parameter na "-a" para sa may-akda at isa pang "-h" para sa tulong at syntax. Tulad ng nakita natin sa mga nakaraang artikulo o ipinauubaya ko sa iyo na huwag gawing mas mahirap ang code.
Inaasahan ko at inaasahan kong ang artikulong ito ay naging interesado ka.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Omar B.M. dijo

    Kumusta, may makakatulong ba sa akin? Kailangan kong mag-install ng lubuntu sa aking lumang desktop computer ngunit hindi ako pinapayagan na mag-install sa pamamagitan ng USB at nasira ang dvd drive, nais ko lamang i-install http://www.plop.at sa Ubuntu 16.04 LTS ngunit hindi ko alam kung paano ito gawin. Salamat

    1.    Larawan ng placeholder Pedro Ruiz Hidalgo dijo

      Omar,

      Tulad ng nabanggit mo, ang sitwasyon ay hindi masyadong nangangako: bawal ang usb at nasira ang dvd drive. Ngunit nagkomento ka rin na ang "computer ay luma", nangangahulugang mayroon kang bago. Subukang ilagay ang pag-install sa isang hard drive mula sa iyong gumaganang computer at subukang i-install ito mula sa drive na iyon.

      Regards

    2.    Cesar Deba dijo

      Mayroon ka bang isang computer at isang naaalis na kahon? I-mount ang hard drive ng lumang computer sa naaalis na usb box at simulan ang disk ng pag-install.
      Ang Linux at Unix ay hindi isinasaalang-alang ang hardware sa antas ng boot, kung saan maaari mong ilagay muli ang disk sa naka-install na linux.

    3.    Omar B.M. dijo

      Maraming salamat sinabi ko sa iyo na ang ginawa ko ay pumunta mula sa Ubuntu 16.04 hanggang Lubuntu 16.04 sa loob ng parehong operating system hehe at sa gayon ang aking luma na computer ay gumagana nang maayos hehe mga pagbati mula sa Colombia.