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 행에 설명 된 CHAIN ​​변수의 위치 12에서. 항상 위치 0부터 계산하기 시작.

14 행 : 출발 CHAIN ​​변수의 위치 12, 나는 5의 세그먼트를 보여줍니다. 당신이 확인하는 것처럼 이것은 하위 문자열 "Linux".

15 행 : 나는 따옴표로 묶인 새 문자열 나는«I learn in«으로 시작하여 CHAIN ​​변수의 하위 문자열로 계속합니다. 위치 31에서 7 세그먼트를 가져옴: 이것은에 해당 «Ubunlog».

포스트 백 기능

Bash를 사용한 반환 메커니즘은 "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 번째 줄에서 함수 합계를 선언합니다. 매개 변수의 첫 번째 할당을«로컬»을 통해 정의합니다. ($ 1) 변수 "a"에. 5 행의 동일한 절차, 여기서 두 번째 매개 변수 a ($ 2)를 변수«b»에 할당합니다.. XNUMX 행에서 우리는 다음에 설명 된 메커니즘에 의해 변환 될 두 개의 매개 변수가있는 sum 함수를 호출합니다. 변수 "a"와 "b"와 "return"을 사용하여 추가 된 값을 반환합니다., 기능 지침에서 쉽게 볼 수 있습니다.

변수 "return"을 10 행 : 함수 합계 실행 결과.

공부하고 이해 한 후 값 반환 및 변수 할당이 실행됩니다. 우리의 프로그램을 보러 가자 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으로 나눌 수있는 숫자는 XNUMX이됩니다., 그 편지 그것은«T»에 해당합니다, 이후 위치 0, 위의 스크립트에서 보았 듯이 모든 하위 문자열은 XNUMX부터 계산됩니다.. 즉, 모듈을 사용하면 항상 숫자를 얻습니다. 0 (문자 "T")과 22 (문자 "O") 사이. 다른 언어와 마찬가지로 Bash에서 % 연산자«%»를 통해 모듈을 얻습니다..

5 행 우리는 문자를 정의합니다 당신의 순서에. 분명 해요 순서는 변경할 수 없습니다 신뢰할 수있는 결과를 위해. 라인의 경우 9 우리는 묻는다 스크립트를 호출 할 때 매개 변수로 숫자가있는 경우. 매개 변수가없는 경우 11 행에서 13 행까지의 지시 사항과 함께 키보드로 요청합니다. 스크립트가 15 행에서 순서를 계산하기 위해 숫자로 호출 된 경우이 매개 변수를 변수«ndni»에 할당합니다.

23 행에서 우리는 다음의 매개 변수를 통해 모듈로 함수를 참조합니다. 변수«ndni», bash에서 매개 변수로 수집되거나 키보드에서 입력으로 수집 됨. 24 행에서 함수의 리턴은 변수«mod»에 할당됩니다. 25m 라인모듈러스 및 하위 문자열 계산에 따라 위치에 해당하는 숫자, 대시 및 문자를 표시합니다..

DNI 스크립트 테스트

$ ./dni 12345678
12345678-Z

아,

$ ./dni

 Cálculo DNI, Introduce número

모든 스크립트에는 작성자에 대한 "-a"매개 변수와 도움말 및 구문에 대한 또 다른 "-h"가 포함되어야합니다. 이전 기사에서 보았 듯이 코드가 더 번거로워지지 않도록 여러분에게 맡깁니다.
이 기사가 귀하의 관심을 끌었기를 바랍니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   오마르 BM

    안녕하세요, 누군가 저를 도와 줄 수 있습니까? 이전 데스크톱에 lubuntu를 설치해야하지만 USB를 통해 설치할 수없고 DVD 드라이브가 손상되었습니다. 그냥 설치하고 싶습니다. http://www.plop.at Ubuntu 16.04 LTS에 연결했지만 어떻게해야할지 모르겠습니다. 감사

    1.    Pedro Ruiz Hidalgo 자리 표시 자 이미지

      오마르,

      언급했듯이 상황은 그다지 유망하지 않습니다. USB가 허용되지 않고 DVD 드라이브가 손상되었습니다. 그러나 당신은 또한 "컴퓨터가 오래되었다"고 말하는데, 그것은 당신이 새로운 것을 가지고 있다는 것을 의미합니다. 작업중인 컴퓨터에서 하드 드라이브에 설치를하고 해당 드라이브에서 설치해보십시오.

      안부

    2.    세자르 델바

      컴퓨터와 이동식 상자가 있습니까? 이동식 USB 상자에 이전 컴퓨터의 하드 드라이브를 장착하고 설치 디스크를 시작합니다.
      Linux 및 Unix는 부팅 수준에서 하드웨어를 고려하지 않으므로 Linux가 설치된 상태에서 디스크를 다시 넣을 수 있습니다.

    3.    오마르 BM

      내가 한 일은 동일한 운영 체제 내에서 Ubuntu 16.04에서 Lubuntu 16.04로 이동하는 것이었고, 그게 내 오래된 컴퓨터가 잘 작동하는 방식이었습니다. 콜롬비아에서 인사드립니다.