बश लिपि का उपयोग करके 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

पदार्थ का संचालन

जैसा कि आप ऊपर देख सकते हैं मैंने १३ से १५ पंक्तियों को उजागर किया है स्क्रिप्ट से और कदम अपना कोड स्पष्ट करें. गूंज साथ पैरामीटर "-ई" दिखाने देता है अगली पंक्ति का चरित्र, हमने इस चरित्र को परिभाषित किया है लाइन 7 और चर «असाइन» को सौंपा.

पंक्ति 13: मैं सबस्ट्रिंग दिखाता हूं (सबस्ट्रिंग) चारण चर की, पंक्ति 8 में वर्णित है, स्थिति 12 से. हमेशा स्थिति 0 से गिनना शुरू करना.

लाइन 14: से CHAIN ​​वैरिएबल की स्थिति 12, मैं 5 के सेगमेंट को दिखाता हूं। जैसा कि आप सत्यापित करेंगे कि यह संगत है घटिया "लिनक्स".

पंक्ति 15: मैं एक रचना करता हूं नए स्ट्रिंग उद्धरणों में संलग्न हैं मैं चेंन चर के एक विकल्प के साथ जारी रखने के लिए «मैं« में सीखता हूं 31 की स्थिति से, 7 का खंड लेना: यह से मेल खाती है «Ubunlog».

पोस्टबैक फ़ंक्शंस

बैश के साथ वापसी तंत्र "रिटर्न" कमांड द्वारा निर्मित होता है, हालांकि, जब हमें इसे बैश वैरिएबल से मैच करना होता है, तो यह एक "अजीब" मैकेनिज्म को लागू करता है, जिसे आपको आदत डालनी होगी। आइए निम्नलिखित उदाहरण देखें:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

बैश में उपयोग करने से पहले कार्यों को हमेशा परिभाषित किया जाना चाहिए, इसलिए, के बाद कुटिया हम पंक्ति 4 पर फ़ंक्शन योग घोषित करते हैं हम मापदंडों के पहले के «स्थानीय» कार्य के माध्यम से परिभाषित करते हैं ($ 1) चर "ए" के लिए। लाइन 5 पर पहचान प्रक्रिया, जहां हम चर «बै» के लिए दूसरा पैरामीटर ($ 2) प्रदान करते हैं। लाइन नौ में हम दो फ़ंक्शन के साथ योग फ़ंक्शन को कहते हैं जो कि तंत्र में वर्णित द्वारा परिवर्तित किया जाएगा चर "ए" और "बी" और "वापसी" के साथ हम उन्हें जोड़ते हैं, जैसा कि आसानी से फ़ंक्शन निर्देशों में देखा जा सकता है।

हम चर "रिटर्न" में असाइन करते हैं पंक्ति 10 फ़ंक्शन राशि के निष्पादन का परिणाम है.

जिस तरह से अध्ययन और समझने के बाद मूल्यों की वापसी और चर के असाइनमेंट का अभ्यास किया जाता है के हमारे कार्यक्रम को देखने के लिए चलते हैं बश के साथ डीएनआई पत्रों की गणना.

बश के साथ 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 हमारे DNI का पत्र से मेल खाती है संख्या मॉड्यूल 23। यानी, हम संख्या को 23 से विभाजित करते हैं y भागफल देखने के बजाय, हम शेष भाग का निरीक्षण करते हैं। दूसरे शब्द, जैसे 23 से विभाज्य संख्या शून्य देगीवह पत्र जो यह से मेल खाती है «टी», इसके बाद से स्थिति 0 है, जैसा कि हमने ऊपर की स्क्रिप्ट में देखा है, सभी पदार्थ शून्य से गिनती शुरू करते हैं। यही है, मॉड्यूल के साथ हम हमेशा संख्या प्राप्त करेंगे 0 (अक्षर "T") और 22 (अक्षर "O") के बीच। बैश में, अन्य भाषाओं की तरह मॉड्यूल प्रतिशत ऑपरेटर «%» के माध्यम से प्राप्त किया जाता है.

में पंक्ति 5 हम अक्षरों को परिभाषित करते हैं आपके आदेश में। यह स्पष्ट है, आदेश बदला नहीं जा सकता विश्वसनीय परिणामों के लिए। लाइन के अगर में 9 हम पूछ रहे हैं यदि स्क्रिप्ट को कॉल करते समय पैरामीटर के रूप में एक संख्या थी। यदि कोई पैरामीटर नहीं है, तो हम इसे कीबोर्ड से 11 से 13 तक की पंक्तियों के निर्देशों के साथ अनुरोध करते हैं। यदि स्क्रिप्ट को 15 नंबर पर ऑर्डर की गणना करने के लिए संख्या के साथ बुलाया गया था, तो यह इस पैरामीटर को चर «ndni» पर असाइन करता है।

23 लाइन में, हम के पैरामीटर के माध्यम से modulo फ़ंक्शन का उल्लेख करते हैं चर «ndni», या तो बैश में एक पैरामीटर के रूप में एकत्र किया गया है, या इनपुट के रूप में कीबोर्ड द्वारा। 24 लाइन में फ़ंक्शन की वापसी चर «मॉड» को सौंपा गया है। 25 मीटर लाइन परहम मापांक और प्रतिस्थापन के हिसाब से स्थिति के अनुसार संख्या, एक डैश और अक्षर दिखाते हैं.

हमारे DNI स्क्रिप्ट का परीक्षण

$ ./dni 12345678
12345678-Z

ओ अच्छा,

$ ./dni

 Cálculo DNI, Introduce número

हमारी सभी लिपियों में लेखक के लिए एक पैरामीटर "-ए" और मदद के लिए एक और "-एच" शामिल होना चाहिए। जैसा कि हमने पिछले लेखों में देखा है या कोड को अधिक बोझिल बनाने से बचने के लिए मैं इसे आपको छोड़ देता हूं।
मुझे आशा है और आशा है कि यह लेख आपकी रुचि का रहा है।


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   उमर बी.एम. कहा

    नमस्कार, क्या कोई मेरी मदद कर सकता है, मुझे अपने पुराने डेस्कटॉप पर lubuntu को इंस्टॉल करने की आवश्यकता है, लेकिन यह मुझे USB के माध्यम से इंस्टॉल नहीं करने देगा और डीवीडी ड्राइव क्षतिग्रस्त हो गया है, मुझे बस इंस्टॉल करना है http://www.plop.at Ubuntu 16.04 LTS के लिए, लेकिन मुझे नहीं पता कि यह कैसे करना है। धन्यवाद

    1.    पेड्रो रुइज़ हिडाल्गो प्लेसहोल्डर छवि कहा

      उमर,

      जैसा कि आपने उल्लेख किया है, स्थिति बहुत आशाजनक नहीं है: यूएसबी की अनुमति नहीं है और डीवीडी ड्राइव क्षतिग्रस्त है। लेकिन आप यह भी टिप्पणी करते हैं कि "कंप्यूटर पुराना है", इसका मतलब है कि आपके पास एक नया है। अपने काम करने वाले कंप्यूटर से हार्ड ड्राइव पर इंस्टॉलेशन डालने का प्रयास करें और इसे उस ड्राइव से इंस्टॉल करने का प्रयास करें।

      सादर

    2.    सीजर डेल्बा कहा

      क्या आपके पास एक कंप्यूटर और एक हटाने योग्य बॉक्स है? पुराने कंप्यूटर की हार्ड ड्राइव को रिमूवेबल usb बॉक्स में माउंट करें और इंस्टॉलेशन डिस्क को स्टार्ट करें।
      लिनक्स और यूनिक्स बूट स्तर पर हार्डवेयर को ध्यान में नहीं रखते हैं, जिसके साथ आप डिस्क को फिर से स्थापित लिनक्स के साथ रख सकते हैं।

    3.    उमर बी.एम. कहा

      बहुत बहुत धन्यवाद मैं आपको बताता हूं कि मैंने जो किया था वह उबंटू 16.04 से लुबंटू 16.04 तक उसी ऑपरेटिंग सिस्टम के भीतर जाना था और इसलिए मेरा पुराना कंप्यूटर कोलंबिया से अच्छी तरह से काम कर रहा था।