Raspberry Pi_Kor_20.2.4 script에서의 연산


Published Book on Amazon


All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1

All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)

최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


20.2.4  script에서의 연산

 

20.2.4.1    대입 연산(assignment operation)

 

script에서 변수를 새로 정의하거나, 변수에 어떤 값을 지정하는 것을 대입(assignment)라고 하는데, 이럴 때 사용하는 연산자가 "="이다이런 방식을 assignment mode라고 하며, 기본적인 형식은 다음과 같다.

 

VARIABLE=Value

 

"VARIABLE=Value"에서 공백이 있어서는 안 된다.

ex) PIDDIR=/var/run/samba

 

변수에 대입되는 Value에 공백이 있는 경우는 " "을 사용하여 "xxx xxx" 형식으로 표현해야 한다

ex) name="David John"

 


 

20.2.4.2    참조 연산(reference operation)

 

   변수 값에 대한 참조

 

변수에 지정되어 있는 현재값을 참조하여 작업을 하고자 할 때는 "$" 연산자를 사용하는데, 변수의 이름 앞에 "$"를 붙여서 "$VARIABLE" 형태로 사용한다. 이런 방식을 referencing mode하고 하며, 기본적인 형식은 다음과 같다.

 

$VARIABLE

 

다음은 간단한 대입과 참조를 표시한 예이다. "PIDDIR" 변수를 정의하여 값을 할당하고, 다음 문장에서 "$PIDDIR"의 형태로 변수에 할당되어 있는 값을 참조하여 사용한 것이다.

 

PIDDIR=/var/run/samba

NMBDPID=$PIDDIR/nmbd.pid

 

문자열 내부에서도 "$변수"가 사용되면 변수의 값이 사용된다.

 "$변수"           -- 변수의 값이 사용된다.

 

 

   변수 명에 대한 참조

 

변수 이름을 그대로 사용하려면 ‘ ’(single quote)를 함께 사용한다.

 $변수’ -- 변수 이름이 사용된다.

 

문자열 내부에서 변수 이름을 사용하려면 \(escape)를 함께 사용한다.

"$변수"          -- 변수 이름이 사용된다.


 

20.2.4.3    정수형 산술 연산(integer type arithmetic operation)

 

   산술 연산자(arithmetic operator)

 

script에서 숫자로 계산하는 것을 산술 연산이라고 하며, 산술 연산자에는 다음과 같은 것이 있다.

    +               -- 더하기

    -                -- 빼기

    *                -- 곱하기

                      -- "expr" 명령에서는 "*"으로 사용한다

    /                -- 나누기

    **              -- 누승 (exponentiation)

    %              -- modular, mod -- 정수 나누기에서 나머지 값

    +=             -- plus-equal     -- 상수값 만큼 증가

    -=              -- minus-equal   -- 상수값 만큼 감소

    *=              -- times-equal    -- 상수값을 곱함

    /=              -- slash-equal    -- 상수값으로 나눔

    %=            -- mod-equal     -- 상수값으로 나눈 나머지 값

 

 

   숫자 계산 결과의 대입 처리

 

숫자 계산결과를 다른 변수에 대입하는 작업은 다음과 같은 형식으로 처리한다여기서 operand operator에는 공백이 없어도 되고, 산술식 안에서 변수를 참조할 때는 $를 사용하지 않아도 된다.

    기본형식     -- 변수= $((산술식))

 

n=$(($n+2))

n=$(( $n + 2 ))

n=$((n+2))

n=$(( n + 2 ))

 

[사용 Example]

 

#! /bin/bash

n=1

 

n=$(($n+1 ))

echo $n

 

n=$((n+1))

echo $n

 

 

   "declare" 연산자로 정의된 숫자 변수를 사용하는 방법

 

script에서 숫자에 해당하는 변수를 선언하면 해당 변수는 "0"으로 초기화 된다. 연산식에서 변수를 참조할 때 "$"를 사용하지 않아도 된다. 또한 연산식에 공백이 있으면 " " (double-quote)를 이용한다.

 

declare -i num

num=num+10  

num=$num+10  

 

[사용 Example]

 

#! /bin/bash

 

declare -i n

 

n=$n+1

echo $n

 

n="n + 1"

echo $n

 


 

   let 연산자를 이용하는 방법

 

"let" 연산자는 정수형 산술 연산을 수행하고 숫자 표현식을 테스트 한다. 연산식에서 변수를 참조할 때 "$"를 사용하지 않아도 된다. 또한 연산식에 공백이 있으면 " " (double-quote)를 이용한다.

 

let n=$n+10

let n="$n + 10"

let n=n+10

let n="n + 10"

 

[사용 Example]

 

#! /bin/bash

n=1

 

let "n= $n + 1"

echo $n

 

let "n=$n+1"

echo $n

 


 

   expr 명령을 이용한 산술연산

 

script에서 "expr" 명령을 이용해서 산술연산을 수행할 수 있다. "expr" 명령은 기본적으로 operand operator에 공백이 필요하다. 주의할 점은 "*"을 사용할 때는 escape("")을 함께 사용해야 한다.

 

이렇게 "expr" 명령을 이용해서 계산한 결과를 사용할 때는 ` `( backtab)을 이용하여 연산식 전체를 에워싸여 한다.

 

n=`expr $n + 2`

n=`expr $n - 1`

n=`expr $n / 3`

n=`expr $n * 3`           -- "*"를 의미함

 

[사용 Example]

 

#! /bin/bash

n=1

n=`expr $n + 1`

echo $n

 

 

20.2.4.4    실수형 산술 연산(real type arithmetic operation)

 

Shell에서는 실수형 연산을 허용하지 않는다. 실수형 연산을 하려면 "awk" 명령을 사용한다.

계산 결과를 사용할 때는 ` `( backtab)을 이용하여 연산식 전체를 에워싸야 한다.

 

pi@raspberrypi:~ $ m=`awk -v x=2.66 -v y=5.22 'BEGIN{printf "%.2f\n", x*y}'`

 

pi@raspberrypi:~ $ echo $m

13.89

 


 

20.2.4.5    논리 연산(logical operation)

 

보통의 프로그램에서는 여러 가지 상태를 검사하여 상황을 판단하게 되는데, 이럴 때 필요한 것이 논리 연산이다. 논리연산은 처리의 결과가 참(true) 또는 거짓(false)으로 판명이 나는 연산을 말한다. 다음과 같은 연산을 할 수 있다

 

   비교 연산자(comparison operator)를 이용한 논리 연산

 

이 연산자들은 두 개의 값을 비교하여 크기를 판단하고, 그 결과에 따라서 True 또는 False를 결정한다.  

 

<operand-1>    <연산자>    <operand-2>

 

크기 비교 연산자에는 다음과 같은 것이 있다.

    =              -- operand-1 operand-2가 같으면 True, 아니면 False

    -eq            -- operand-1 operand-2가 같으면 True, 아니면 False

 

    !=            -- operand-1 operand-2가 다르면 True, 아니면 False

    -ne            -- operand-1 operand-2가 다르면 True, 아니면 False

 

    -gt             -- operand-1 >  operand-2 이면 True, 아니면 False          

    -ge            -- operand-1 >= operand-2 이면 True, 아니면 False

 

    -lt              -- operand-1 <  operand-2 이면 True, 아니면 False

    -le             -- operand-1 <= operand-2 이면 True, 아니면 False

 

 

   논리 연산자(logical operator)를 이용한 논리연산

 

이것은 두 개의 조건식에 대해서 논리 연산을 해주는 연산자이다. 이것은 "test" 명령이나 "if" 테스트 대괄호 안에서 사용할 수 있다.

 

    "and" 논리 연산자  

 

<조건식-1 <조건식-2>의 값이 모두 "True"이면 "True", 아니면 "False"를 반환한다.

 

<조건식-1>       <연산자>          <조건식-2>

 

다음과 같은 연산자를 사용할 수 있다.

    -a              -- and

    &&            -- and

 

    "or" 논리 연산자    

 

<조건식-1> <조건식-2>의 값 중에서 적어도 하나가 "True"이면 "True", 아니면 "False"를 반환한다.

 

<조건식-1>       <연산자>          <조건식-2>

 

다음과 같은 연산자를 사용할 수 있다.

    -o              -- or

    ||               -- or

 

    결과 부정

 

이 연산자는 조건식의 연산결과를 반대로 만드는 연산자이다. 조건식의 연산 결과가 True이면 False로 바꾸고, 기존 연산의 결과가 False이면 True로 변경해 준다.  

 

<연산자>    <조건식 >

 

다음과 같은 연산자를 사용할 수 있다.

    !                -- negative

 


 

   파일 연산자(file operator)를 이용한 논리 연산

 

이 연산자는 지정된 파일에 대해서 어떤 상태를 점검한 다음 그 결과를 알려주는 연산자이다. 주로 test명령에서 자주 사용한다. 점검 결과는 True 또는 False로 되돌려 준다.

 

<연산식>    <directory/file>

 

파일 연산자에는 다음과 같은 것이 있다:

    -a   -- 해당 파일이 존재하면 True, 아니면 False

    -e   -- 해당 파일이 있으면 True, 아니면 False

 

    -r   -- 사용자가 해당 파일을 읽을 수 있으면 True, 아니면 False

    -w -- 사용자가 해당 파일을 쓸 수 있으면 True, 아니면 False

    -x   -- 사용자가 해당 파일을 실행할 수 있으면 True, 아니면 False

    -o -- 사용자가 해당 파일의 소유자이면 True, 아니면 False

 

    -z   -- 해당 파일의 크기가 0이면 True, 아니면 False

 

    -f   -- 해당 파일이 파일이면 True, 아니면 False

    -d -- 해당 파일이 디렉터리이면 True, 아니면 False


 

Leave a Reply