리눅스

쉘 프로그래밍 [숫자 연산 expr, bc]

작성자
heukchoo
작성일
2021-01-17 23:55
조회
789
쉘에서는 숫자와 문자를 구분하지 않기 때문에 C프로그램 처럼 숫자 연산이 간단하지 않다.

쉘에서 숫자를 연산하는 방법은 다양하지만 여기서는 expr과 bc를 소개한다.


expr은 bash 내장 명령어로 정수만 연산 가능하다.

bc는 환경에 따라 추가 설치해야하는 프로그램으로 실수까지 계산 가능하다.

bc만 알면 되는데 굳이 expr을 알아야 하는지 의문이겠지만 정수 연산이 많은 프로그래밍을 할 경우 내장 명령어인 expr을 사용하는것이 속도면에서 효율적이다.


expr 명령어


$val1=1

$val2=2

$var3=`expr $var1 + $var2`

$echo var3
3


방법은 간단하지만 변수와 연산자 사이에 공백을 넣어야 함을 유의하자.

연산자는 +, -, *, /, %(나머지)를 모두 사용가능하지만 * 연산자의 경우 반드시 '*'(작은 따옴표로 감싸기) 또는 \*(앞에 역슬래시)로 표현해야 한다.

var3과 같이 그레이브(`)로 계산식을 묶으면 결과를 변수에 저장할 수 있다.

expr은 조건비교 등도 가능하지만 본 페이지에서는 숫자 연산만 소개한다.


bc 명령어


$echo "4 / 3" | bc
1

$echo "4 / 3" | bc -l
1.33333333333333333333

$echo "scale=3; 4 / 3" | bc
1.333


echo 명령어로 계산식을 표현하고 파이프라인(|)으로 bc 명령에게 계산식을 넘겨서 계산하는 방식이다.

예시에는 상수 값만 사용하였지만 변수도 사용 가능하고 앞선 expr과 같이 그레이브(`)를 사용하여 계산 결과를 변수에 입력할 수도 있다.

계산 결과를 실수로 표현하려면 예시와 같이 -l 옵션을 사용하거나 scale을 지정하면 된다.

사칙연산 기호는 expr과 동일하며 *을 그대로 사용해도 되고 공백도 굳이 따지지 않는다.


$echo "2 > 1" | bc
1

$echo "2 == 1" | bc
0

$echo "2 == 2 && 2 > 1" | bc
1


위 예제는 bc 명령의 조건검사 기능이다.

조건이 참이면 1을 거짓이면 0을 반환한다.

&& 기호는 and 연산자로 두개의 조건이 모두 만족되어야 참이다.

참고로 or 연산자는 || 기호를 사용하며 두개의 조건 중 하나만 만족되어도 참이다.


bc의 조건검사 기능은 다음에 소개할 조건문 if를 위해 미리 소개하였다.
전체 0