bash script로 정수 연산이 가능하다. expr를 사용하면 가능하다.
$ a=1
$ b=2
$ c=`expr $a + $b`
$ echo $c
3
참고로 expr 사용시 공백이 연산자 주변에 있지 않으면 문자열로 인식한다. (;;;;)
$ c=`expr $a-$b`
$ echo $c
1-2
만약 실수 연산을 하면 decimal 숫자가 없다고 expr 에러가 발생한다.
$ a=1.1
$ b=2.2
$ c=`expr $a + $b`
expr: not a decimal number: '1.1'
실수 연산을 하려면 bc 명령어를 활용한다. bc는 An arbitrary precision calculator language 이다.
echo 연산식에 파이프라인으로 bc를 추가한다.
$ echo $a+$b |bc
3.3
여러 연산을 동시에 하려면 세미콜론(;)을 사용하고, 마지막 연산 값을 last 또는 점(.)으로 활용할 수 있다.
$ echo "$a+$b;last/2;last+1" | bc
3.3
1
2
$ echo "$a+$b;./2;.+1" | bc
3.3
1
2
<<< 을 사용하면 bc 커맨드를 맨 앞으로 위치시킬 수 있다.
$ bc <<< $a+$b
3.3
정확도가 높은 실수 계산을 bc -l을 사용한다.
$ echo "$a/$b;./3;.+1.11" | bc -l
.50000000000000000000
.16666666666666666666
1.27666666666666666666
sqrt도 함께 사용할 수 있다. 참고로 read로 파일도 읽을 수 있다.
$ echo "sqrt(10^2)" | bc
10
지수도 함께 사용할 수 있다.
$ echo "e(1)" | bc -l
2.71828182845904523536
실수를 표현하다 보니, 길이에 대한 개념이 있다. lengh와 scale 속성을 이용한다. length는 숫자의 전체 개수이고, scala는 소수점(.)뒤에 개수를 의미한다.
scale=10을 주면, 소수점 10자리를 표현한다.
$ echo "scale=10;e(1)" | bc -l
2.7182818284
scale=200을 주면, 소수점 10자리를 표현한다.
$ echo "scale=200;e(1)" | bc -l
2.718281828459045235360287471352662497757247093699959574966967627724\
07663035354759457138217852516642742746639193200305992181741359662904\
357290033429526059563073813232862794349076323382988075319525101901
'c or linux' 카테고리의 다른 글
빈 줄 정리하는 grep 예시 (빈 줄 삭제) (0) | 2015.11.16 |
---|---|
mac os x에서 linux의 date 테스트하기 - mac os x과 linux의 date는 다르다. (0) | 2015.11.09 |
리눅스 운영체제가 메모리를 먹는 사건 (free, buffers/cache) (0) | 2015.10.28 |
[linux] top의 특정 항목으로 보기(소팅 관점) (0) | 2015.10.27 |
[리눅스] 특정 프로세스의 home directory 찾기 (0) | 2015.10.15 |