Bash를 사용하여 두 숫자를 어떻게 추가(빼기 등)할 수 있나요?

Bash를 사용하여 두 숫자를 어떻게 추가(빼기 등)할 수 있나요?

다음을 사용하여 숫자와 연산을 읽을 수 있습니다.

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op

하지만 숫자를 추가하려는 모든 시도는 실패합니다.

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac

달리다:

First number please
1
Second mumber please
2
Operation?
+

산출:

num1+num2

...또는...

echo $num1+$num2;;

# results in: 1+2    

...또는...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found

add add("4" 대신 "2+2")를 시도할 때 여전히 문자열이 나타나는 것 같습니다.

답변1

POSIX 쉘의 산술$및 이중 괄호 로 완료됩니다 (( )).

echo "$(($num1+$num2))"

거기에서 할당할 수 있습니다. 또한 $내부의 변수 이름에 대한 연산자는 (())선택 사항입니다.)

num1="$((num1+num2))"

도 있습니다 expr:

expr $num1 + $num2

스크립트에서는 명령 $(())에 대한 분기/실행을 방지하므로 바람직합니다 expr.

답변2

기존 답변은 순수 bash이므로 이보다 빠르지만 정수만 처리할 수 있습니다. 부동 소수점을 처리해야 하는 경우 외부 프로그램을 사용해야 합니다 bc.

$ echo 'scale=4;3.1415+9.99' | bc
13.1315

소수점 네 자리를 사용하라고 지시 scale=4합니다 . 자세한 내용은 을 bc참조하세요 man bc.

답변3

구조를 사용할 수도 있습니다 $[ ... ]. 이 경우 Bash에 내장된 메커니즘을 사용하는데, 이는 더 빠르고 사용하기가 좀 더 편리합니다. $[와 ] 사이의 모든 내용이 표현식으로 처리된다는 것을 알고 있으므로 변수 앞에 를 붙일 필요가 없습니다 $. 마찬가지로 *패턴처럼 취급하는 것을 방지할 필요도 없습니다 .

num1=2
num2=3
echo $[num1 + num2]
5

답변4

미니멀리스트

total=0
((total+=qty))

관련 정보