숫자를 읽고 다음과 같이 작동할 수 있습니다.
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
"4" 대신 add("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
소수점 4자리를 사용하라고 알려주세요 . 자세한 내용은 을 참조하세요 man bc
.
답변3
구조를 사용할 수도 있습니다 $[ ... ]
. 이 경우에는 더 빠르고 사용하기 쉬운 Bash에 내장된 메커니즘을 사용합니다. $[ 와 ] 사이의 모든 내용이 표현식으로 간주된다는 것을 알고 있으므로 변수 앞에 추가할 필요가 없습니다 $
. 다시 말하지만, 우리는 *
이것을 패턴으로 보는 것을 피할 필요가 없습니다 .
num1=2
num2=3
echo $[num1 + num2]
5
답변4
미니멀리스트
total=0
((total+=qty))