學習使用Bash腳本計算DNI字母

滿足後 要求能夠運行bash腳本,並了解 如何定義功能, 學習怎樣 在bash函數中返回值。 為此,我們將在Bash中創建一個小型但功能強大的程序 計算DNI的字母。 我有個好消息:Bash也可以 在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行 從腳本和步驟到 解釋你的代碼. Echo參數“ -e” 讓我們來展示 下一行字符,我們已經在 第7行並分配給變量«ret».

第13行:我顯示了子字符串(子串),如第8行所述 從位置12開始. 總是從位置0開始計數.

第14行:從 CHAIN變量的位置12,我顯示了5的段。 正如您將要驗證的,這對應於 子字符串“ Linux”.

第15行:我撰寫了一個 用引號引起來的新字符串 我從《我學習》開始,接著是CHAIN變量的子字符串 從第31位開始,取7分:這對應於 «Ubunlog».

回發功能

使用Bash的return機制是由“ return”命令產生的,但是,當我們必須將其與Bash變量進行匹配時,它實現了一種“奇怪”的機制,您必須習慣這種機制。 讓我們看下面的例子:

#!/usr/bin/env bash

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

suma 12 23
retorno=$?
echo $retorno

必須始終在Bash中使用函數之前定義函數因此, 家當 我們在第4行聲明函數sum 我們通過“本地”定義第一個參數的分配 ($ 1)到變量“ a”。 第5行的相同步驟,其中 我們將第二個參數a($ 2)分配給變量«b»。 在第XNUMX行中,我們使用兩個參數調用sum函數,這兩個參數將通過 變量“ a”和“ b”,並通過“ return”返回它們,可以在功能說明中輕鬆看到。

我們在 第10行執行函數sum的結果.

在學習並理解了其中的方式之後 值的返回以及對變量的賦值 讓我們來看一下我們的程序 用Bash計算DNI字母.

使用Bash計算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整除的數字將為零,那封信 對應的是«T», 從此 在位置0,正如我們在上面的腳本中看到的那樣, 所有子串從零開始計數。 也就是說,通過該模塊,我們將始終獲得數字 在0(字母“ T”)和22(字母“ O”)之間。 與其他語言一樣,在Bash中 該模塊是通過百分比運算符“%”獲得的.

第5行,我們定義字母 在您的訂單中。 很明顯, 訂單無法更改 獲得可靠的結果。 如果該行 9 我們在問 如果在調用腳本時有一個數字作為參數。 如果沒有參數,我們將在鍵盤上按照第11到13行中的指令在鍵盤上請求它。如果使用數字調用腳本以計算第15行的順序,則將此參數分配給變量«ndni»。

在第23行中,我們通過的參數引用模函數 變量“ ndni”,它已作為bash中的參數收集,或通過鍵盤作為輸入。 在第24行中,該函數的返回被分配給變量«mod»。 在25 m線上根據模塊和子字符串的計算,我們顯示與位置相對應的數字,破折號和字母.

測試我們的DNI腳本

$ ./dni 12345678
12345678-Z

好吧,

$ ./dni

 Cálculo DNI, Introduce número

我們所有的腳本都應為作者提供一個參數“ -a”,並為幫助和語法提供一個“ -h”參數。 正如我們在之前的文章中所看到的,或者我留給您看,是為了不使代碼變得更加繁瑣。
我希望並希望您一直對本文感興趣。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   奧馬爾(Omar BM) 他說:

    您好,有人可以幫我嗎,我需要在舊台式機上安裝lubuntu,但它不允許我通過USB安裝並且DVD驅動器已損壞,我只想安裝 http://www.plop.at 到Ubuntu 16.04 LTS,但我不知道該怎麼做。 謝謝

    1.    Pedro Ruiz Hidalgo的佔位符圖像 他說:

      奧馬爾

      如您所述,情況不是很樂觀:不允許使用USB並且DVD驅動器已損壞。 但是您還評論說“計算機是舊的”,這意味著您有一台新計算機。 嘗試將安裝從工作計算機上放置到硬盤驅動器上,然後嘗試從該驅動器上安裝它。

      問候

    2.    塞薩爾·德爾巴(Cesar Delba) 他說:

      您有一台電腦和一個可移動的盒子嗎? 將舊計算機的硬盤驅動器安裝在可移動USB盒中,然後啟動安裝盤。
      Linux和Unix在啟動級別不考慮硬件,使用它可以在安裝了Linux的情況下再次放置磁盤。

    3.    奧馬爾(Omar BM) 他說:

      非常感謝,我告訴你,我要做的是在同一操作系統下從Ubuntu 16.04轉到Lubuntu 16.04,這就是我的舊計算機運行良好的方式,來自哥倫比亞的問候。