2014-10-14 2 views
0

주어진 x 번호의 제곱근을 찾기 위해이 코드를 작성했지만 마지막 부분에서 "정수 표현식이 필요합니다"라고 알려줍니다. 어떻게해야합니까? (저는 쉘/bash 멍청이입니다)숫자의 제곱근을 찾는 Bash 스크립트 (바빌론 방법)

#bin/bash 
    2 clear 
    3 echo "Hello, we will calculate the square root of a number x" 
    4 echo "We're going to use the Babylonian Method" 
    5 echo "Give me a valor for x" 
    6 read x 
    7   if [ $x -lt 0 ] 
    8   then 
    9   clear 
10   echo "The roots of this number are imaginary" 
11   elif [ $x -eq 0 ] 
12   then 
13   clear 
14   echo "The square root of 0 is 0" 
15 else 
16   echo "Now give me a base b and a vertical height h so that bh=x" 
17   
18   echo "Give me b" 
19   read b 
20   echo "Give me h" 
21   read h 
22 fi 
23 
24   if [ $b -eq $h ] 
25   then 
26   echo:"b or h are already the square root of h" 
27   else 
28   until [ $b -eq $h ] 
29   do 
30   b=`echo "scale=3; ($b + $h)/2"|bc -l` 
31   h=`echo "scale=3; $x/$b"|bc -l` 
32   done 
33   fi 
34   echo "the square root of x is $b or $h" 
35 
+0

http://unix.stackexchange.com/q/155551/74329 – Cyrus

답변

1

배쉬는 정수 만 처리 할 수 ​​있습니다. 동일은 (man test 확인) [ ... ]에 적용

INTEGER1 -eq INTEGER2 
    INTEGER1 is equal to INTEGER2 

, 수레를 비교 이미 정확하게 계산을 위해 할로 bc을 사용하려면.

+0

bc를 사용하는 경우에도 정밀도 제한으로 인해 무한 루프가 발생할 수 있습니다. 예를 들어, until 식을 변경하여 bc를 사용한 후에 값을 입력 해보십시오. – Rein

+0

어떻게 설명해 주시겠습니까? 나는 그것을하려고했지만 좋은 결과를 얻지 못했다. – mobzopi

+0

''[[1 == $ (bc -l <<< "$ b == $ h")]]' – choroba

관련 문제