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 ( “4”대신 “2 + 2”)를 추가하려고 할 때 여전히 문자열이 표시되는 것 같습니다.

p>

댓글

  • 이것은 좋은 일반적인 질문이기 때문에 제목을 편집했습니다. 문맥을 좁 히면이 문제와 관련이 없음을 깨달았을 것입니다. case 또는 한 줄을 제외한 모든 항목 : echo $num+$num, 문제를 정확하게 재현 하기 때문입니다. 프로그래밍 질문의 컨텍스트는 여기에 설명되어 있습니다. sscce.org
  • +1 안녕하세요 goldilocks, 예, 나중에 명확 해졌습니다. 전체 y 자신의 추론에 동의합니다. 예, 더 구체적이고 ' 단수 ' 질문이 더 좋습니다. 수정을 환영합니다 🙂 감사합니다 🙂

답변

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=4bc에 소수점 네 자리를 사용하도록 지시합니다. 자세한 내용은 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 $ 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다