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" 명령에서는 "\*"으로 사용한다.
■ / -- 나누기
■ % -- 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