다음을 사용하여 숫자와 연산을 읽을 수 있습니다.
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))