2012-05-05 3 views
0

커맨드의 출력을 저장하는 변수가 있습니다. 어떻게 이것을 플로트와 비교합니까? 배시 비교

foo은 파일 이름입니다 어디
x=$(tail -n 1 foo| cut -d ' ' -f2) 

if (($x < 0)); then ... 

을하고있는 중이 야 더 구체적으로. 나는 다음과 같은 오류를 얻을 위의 일을

-0.08 < 0 : syntax error: invalid arithmetic operator (error token is "0.08 < 0") 

내가 비교해야 값은 -0.08이지만, 오류 토큰이 다른

나는 이러한 비교를 위해 무엇을해야합니까?

답변

3

bash는 부동 소수점 연산을 지원하지 않습니다.
그러나 수술을 수행하는 외부 프로그램 인 bc을 사용할 수 있습니다. 매뉴얼 페이지에서

if (($(bc <<< "$x < 0"))); then 
    printf "%f is less than 0\n" "$x"; 
fi 

는 :

관계 연산자는

expr1 < expr2 
     The result is 1 if expr1 is strictly less than expr2. 

    expr1 <= expr2 
     The result is 1 if expr1 is less than or equal to expr2. 

    expr1 > expr2 
     The result is 1 if expr1 is strictly greater than expr2. 

    expr1 >= expr2 
     The result is 1 if expr1 is greater than or equal to expr2. 

    expr1 == expr2 
     The result is 1 if expr1 is equal to expr2. 

    expr1 != expr2 
     The result is 1 if expr1 is not equal to expr2. 


하나는 또한 부동 소수점를 arithmetics을 지원 awk를 사용할 수 있습니다.

0

ksh를 사용할 수 있다면 float를 지원하므로 Bash 대신 스크립트를 작성할 수 있습니다. Zsh은 또한 수레를 지원합니다.

#!/usr/bin/ksh 
x=$(tail -n 1 foo| cut -d ' ' -f2) 

if ((x < 0)) 
then 
    echo "less than" 
fi