Bashスクリプトを使用してDNIレターを計算する方法を学ぶ

満足した後 必要条件 パラ bashスクリプトを実行できる、そして理解する 関数を定義する方法、 方法を学びます bash関数の戻り値。 このために、Bashで小さいが強力なプログラムを作成します。 DNIの文字を計算する。 良いニュースがあります:Bashもできます Windows10にインストールする。 オペレーティングシステムにLinuxのすべての機能を追加できるものを使用して、たとえば...異なるとしましょう。

まず第一に、私たちはしなければなりません どのように理解する 部分文字列、他の言語と同様に、 文字列の一部を返す チェーンの表示から、セグメントの位置と長さ。 この動作の例を見てみましょう。 スクリプトを作成する

$ touch prueba_substring
$ 

次に、お好みのエディターで次のコードを追加します。 ターミナルモードの場合 私の好みのエディターはmceditです。 しかし最近、nanoが力をつけているのがわかります。

 
#!/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行目で説明されているCHAIN変数の 位置12から. 常に位置0からカウントを開始します.

14行目:From 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行目の手順は同じです。 2番目のパラメーターa($ XNUMX)を変数«b»に割り当てます。。 XNUMX行目では、XNUMXつのパラメーターを使用してsum関数を呼び出します。これらのパラメーターは、 変数「a」と「b」および「return」を使用して、それらを追加して返します、関数の説明で簡単にわかるように。

変数「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。 Esto es、 数を23で割ります y 商を見る代わりに、 残りの部門を観察します。 言い換えれば、 23で割り切れる数はゼロになります、その手紙 それに対応するのは«T»です、 これから 位置0です、上記のスクリプトで見たように、 すべての部分文字列はゼロからカウントを開始します。 つまり、モジュールを使用すると、常に数値を取得します 0(文字「T」)から22(文字「O」)の間。 他の言語と同様に、Bashでも モジュールは、パーセント演算子«%»を使用して取得されます。.

5行目文字を定義します ご注文の際に。 明らかです、 順序は変更できません 信頼できる結果を得るために。 行の場合 9 私たちは尋ねています スクリプトを呼び出すときにパラメータとして数値があった場合。 パラメータがない場合は、11行目から13行目の指示に従ってキーボードで要求します。15行目の順序を計算するためにスクリプトが番号で呼び出された場合は、このパラメータを変数«ndni»に割り当てます。

23行目では、次のパラメーターを使用してモジュロ関数を参照しています。 変数«ndni»、bashのパラメーターとして収集されているか、入力としてキーボードによって収集されている。 24行目では、関数の戻り値が変数«mod»に割り当てられています。 25メートルライン上モジュラスとサブストリングの計算に従って、位置に対応する数字、ダッシュ、文字を表示します.

DNIスクリプトのテスト

$ ./dni 12345678
12345678-Z

まあ、

$ ./dni

 Cálculo DNI, Introduce número

すべてのスクリプトには、作成者用の「-a」パラメーターと、ヘルプと構文用の別の「-h」を含める必要があります。 以前の記事で見たように、またはコードが煩雑になるのを避けるために、私はあなたに任せます。
この記事があなたの興味を引くことを願っています。


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   オマールBM

    こんにちは、誰か助けてもらえますか?古いデスクトップにlubuntuをインストールする必要がありますが、USB経由でインストールできず、DVDドライブが破損しています。インストールしたいだけです。 http://www.plop.at Ubuntu 16.04 LTSに移行しましたが、その方法がわかりません。 ありがとう

    1.    Pedro RuizHidalgoプレースホルダー画像

      オマール、

      あなたが言ったように、状況はあまり有望ではありません:usbは許可されておらず、DVDドライブが損傷しています。 しかし、あなたはまた、「コンピュータは古い」とコメントしています。つまり、新しいコンピュータがあるということです。 作業中のコンピューターからハードドライブにインストールを配置し、そのドライブからインストールしてみてください。

      よろしく

    2.    セザールデルバ

      コンピューターと取り外し可能なボックスはありますか? 古いコンピュータのハードドライブをリムーバブルUSBボックスにマウントし、インストールディスクを起動します。
      LinuxとUnixは、ブートレベルのハードウェアを考慮していません。これを使用すると、Linuxがインストールされた状態でディスクを再度配置できます。

    3.    オマールBM

      どうもありがとうございました。同じオペレーティングシステム内でUbuntu16.04からLubuntu16.04に移行することでした。これが、私の古いコンピューターがコロンビアからの挨拶でうまく機能していたことです。