다음을 사용하여 숫자와 연산을 읽을 수 있습니다.
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 ( “4”대신 “2 + 2”)를 추가하려고 할 때 여전히 문자열이 표시되는 것 같습니다.
p>
댓글
답변
POSIX 셸의 산술 은 $
및 이중 괄호 (( ))
를 사용하여 수행됩니다.
echo "$(($num1+$num2))"
여기에서 할당 할 수 있습니다 (echo
) :
num1="$(($num1+$num2))"
또한 expr
:
expr $num1 + $num2
스크립팅에 $(())
는 expr
명령에 대한 분기 / 실행을 방지하므로 선호됩니다.
댓글
- 또는
case
를 사용하지 않고 직접echo $(($num1$op$num2))
합니다. - 저기 ' 여기에는
case
가 포함되어 있지 않습니다. - 아니요,하지만 리터럴
+
를 사용 했으므로case
외부에서 뺄셈을 개별적으로 처리합니다. - @manatwork : You mea n
echo $(($num1$op$num2))
를 사용하여 OP '의 코드에서case
를 제거하면 작동합니다. 이지만 기본*
로 오류를 처리 할 수 있으므로case
를 사용하는 것이 더 강력합니다. - +1 ~ 너희 둘 다. 케이스를 사용하고 있었지만 (처음에는 표시하지 않았을 수도 있음) 두 분 모두 문제가 케이스에 관한 것이 아니라는 것을 ' 알았습니다.
답변
기존 답변은 순수 bash이므로 이보다 빠르지 만 정수만 처리 할 수 있습니다. 플로트를 처리해야하는 경우 외부 프로그램 bc
를 사용해야합니다.
$ echo "scale=4;3.1415+9.99" | bc 13.1315
scale=4
는 bc
에 소수점 네 자리를 사용하도록 지시합니다. 자세한 내용은 man bc
를 참조하세요.
댓글
-
bash
는 '$((...))
, 많은 셸 (ksh93
의 부동 소수점 산술을 지원하지 않습니다. div>,zsh
,yash
이상) 수행합니다.bc
의 장점은 임의 정밀도를 지원하는 반면 셸 산술은 프로세서 '의double
유형. 여기서 'scale
를 설정할 필요가 없습니다. 추가의 경우scale
매개 변수가 사용되지 않습니다.3.1415+9.99
의 스케일은 피연산자의 스케일 (여기서는 4)에서 파생됩니다. - 한 값이 그리고 다른 하나는 변수
$mynumber
에 저장된 십진수입니까? 예 :450-$mynumber
. - @sigur
echo "450-$mynumber" | bc
가이를 수행해야합니다. 변수를 확장하려면 작은 따옴표 대신 큰 따옴표를 사용해야합니다. - @evilsoup, 이제 매력처럼 작동합니다. 감사합니다.
-
computedval=$(echo 'scale=10;var1-var2' | bc)
는 작동하지 않으며 '도 작동하지 않습니다.computedval=$(echo 'scale=10;$var1-$var2' | bc)
답변
$[ ... ]
구조를 사용할 수도 있습니다. 이 경우 Bash에 내장 된 메카니즘을 사용하여 더 빠르고 사용하기 더 편리합니다. $ [와] 사이의 모든 것이 표현식으로 취급된다는 것을 알고 있으므로 변수 앞에 $
를 붙일 필요가 없습니다. 마찬가지로
를 패턴처럼 취급합니다.
num1=2 num2=3 echo $[num1 + num2] 5
답변
echo `expr $a + $b` echo `expr $a - $b` echo `expr $a \* $b` echo `expr $a / $b`
\
앞에있는 *
(곱하기의 경우)에 유의하십시오. 전체 표현식은 역 따옴표`.
댓글
-
expr
는 필요하지 않으며 절대로 ' 표준 출력에 다시 쓰기 위해 명령의 표준 출력을 캡처하는 데 필요합니다.
Answer
minimalist
total=0 ((total+=qty))
답변
사용자에게 요청한 입력 순서에 따라 , 역 폴리쉬 표기법
echo "First number please" read num1 echo "Second number please" read num2 echo "Operation?" read op
dc
(탁상용 계산기)를 직접 사용하는 것이 더 나을 수 있습니다.DESCRIPTION Dc is a reverse-polish desk calculator which supports unlimited pre- cision arithmetic.
E
dc
를 사용한 xample 세션 :$ dc 1 2 + p # This part is typed; the result comes next. 3 q # This is also typed. $
또는 비대화 형 :
$ dc -e "1 2 + p" 3 $
case
또는 한 줄을 제외한 모든 항목 :echo $num+$num
, 문제를 정확하게 재현 하기 때문입니다. 프로그래밍 질문의 컨텍스트는 여기에 설명되어 있습니다. sscce.org