본문 바로가기
프로그래밍 언어/Shell script(BASH)

[Shellscript] 정수 및 실수 연산

by UltraLowTemp-Physics 2021. 4. 20.
728x90

기본적으로 Shell script에서 정수 및 실수 연산을 처리하는 방법은 아래와 같다. 

 1) 정수 연산: 대괄호 사용, expr, bc, awk 
 2) 실수 연산: expr, bc, awk

 


1. expr

 ▪ syntax: expr <expression>  
 ▪ 예시 

$ result=$( expr 1+2 )
$ echo $result
3

2. 대괄호 사용

 ▪ Bash에서는 변수에 계산 결과를 할당할 때, 달러 기호와 대괄호 기호를 사용하여 수식을 묶을 수 있다. 
 ▪ 장점: expr보다 더 쉽게 수식을 사용할 수 있음 
 ▪ 단점: 정수 연산만 가능 
 ▪ ex) 1 + 5를 계산한 결과를 val1에 할당 후, val1에 2를 곱한 값을 val2에 할당 

$ var1=$[1 + 5] 
$ echo $var1 
6 
$ var2=$[$var1*2]
$ echo $var2     
12 

 


3. 부동 소수점 계산 

 ▪ z shell 사용 
 ▪ bc 사용 (Bash의 내장용 계산기) 
 ▪ awk 사용 


 1)  bc 사용 

   ▪ bc 계산기가 인식하는 것 
           숫자 (정수 및 부동 소수점), 변수 (단순 변수 및 배열), 주석, 수식, 프로그래밍문 (for, if-then, ...), 함수, ...
   ▪ 부동 소수점 계산 
          ∙ scale이란 내장 함수가 제어 
          ∙ scale: 원하는 소수점 이하의 자리를 설정 ( 기본값: 0 )
   ▪ 스크립트에서 bc 사용 1 : 파이프라인 사용
          ∙ 기본적인 형태: variable=$( echo "option; expression" | bc )
          ∙ option: 변수의 옵션 설정하며, 두 개 이상의 변수를 할당 시 세미콜론으로 구분
          ∙ expression: bc로 계산할 수식을 정의함 
   ▪ 스크립트에서 bc 사용 2 : 인라인 입력 리다이렉트 사용 
          ∙ 커멘드 라인에서 직접 데이터를 리다이렉트하는 것
          ∙ 기본적인 형태

a. 스크립트에서 bc 사용:  파이프 라인을 통한 활용 예시 1) 

#! /bin/bash
var1=$( echo “scale=4; 3.44/5” |bc ) 
echo “the answer is $var1”

var2=100
var3=45
var4=$( echo “scale=4; $var2/$var3” |bc )

 

b. 스크립트에서 bc 사용: 인라인 입력 리다이렉트 사용 시 기본적인 형태 

Variable=$(bc << EOF 
options
statements 
expressions
EOF
)

 

c. 스크립트에서 bc 사용: 인라인 입력 리다이렉트의 활용 예시

#! /bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale=4
a1= ($var1 * $var2)
b1= ($var3 * $var4)
a1 + b1
EOF
)

2) awk 사용 

    ▪ 기본적인 형태: variable=$( echo "$val1; $val2;...;$valn" | awk '{printf( expression, values}' )   
    ▪ 출력되는 형태는 c언어에서의 formatting과 동일하다. 
    ▪ 예시

cmt323@master:~$ val=$( echo "1; 2" |awk '{printf "%f", $1 + $2 }' )
cmt323@master:~$ echo $val
3.000000

 

728x90

댓글