bash 수학 연산(
expr
,$[]
)은정수 연산
만 지원합니다.
부동소수점 연산은bc
명령어를 이용할 수 있습니다.
리눅스 커맨드 라인에서 수식을 계산할 때 사용하는 명령어는 expr
입니다.
$ expr 1 + 5
6
표준 연산자(+, /, -
)의 경우는 계산이 에러 없이 잘 처리되지만,
곱셈(*
)의 경우에는 에러가 발생합니다.
$ expr 2 * 5
expr: syntax error: unexpected argument ‘~’
문자열에서 특수 문자를 출력하기 위해 처리했던 방법과 같이 \
를 붙이면 해결됩니다.
$ expr 2 \* 5
10
스크립트 내에서는 $(expr 수식)
의 형식으로 계산을 수행할 수 있습니다.
$ cat test1
#!/bin/bash
var1=10
var2=20
result=$(expr $var1 + $var2)
echo "result : $result"
$ ./test1
result : 30
expr
대신 훨씬 쉽게 이용하는 방법이 있습니다.
$[계산할 수식]
의 방식으로 쉽게 수식을 계산할 수 있습니다.
$ cat test1
#!/bin/bash
var1=10
var2=20
result=$[$var1 + $var2]
echo "result : $result"
$ ./test1
result : 30
expr
과 $[]
방식은 정수 연산만 지원합니다. bash에서 부동소수점 연산을 하고 싶다면, bc
명령어를 이용합니다.
커맨드라인에서 bc
를 명령하면 한 줄 씩 데이터를 입력받는데, 형식이 있습니다.
$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=4
3.14 / 5
.6280
scale=2
3.14 / 5
.62
quit
bc 1.07.1
: 버전 설명Copyright ~ 'warranty'.
: 저작권 설명scale=
: 소수점 몇 째 자리까지 나타낼 것인가quit
을 입력할 때까지 위의 입력을 계속 반복 가능.bc
명령은 위와 같은 데이터 입력 형식이 존재해서 아래와 같은 방식(echo
이용)으로 스크립트에서 이용할 수 있습니다.
$ cat test1
#!/bin/bash
result=$(echo "scale=4; 3.14 / 5" | bc)
echo "result : $result"
$ ./test1
result : .6280
echo
명령으로 bc
명령어의 입력 형식에 맞춰 한 줄에 입력해주고 파이프를 통해 bc
명령으로 보내줍니다.
변수 역시 사용할 수 있습니다.
$ cat test1
#!/bin/bash
var1=3.14
var2=5
result=$(echo "scale=4; $var1 / $var2" | bc)
echo "result : $result"
$ ./test1
result : .6280