[자문자답] 쉘 스크립트의 연산과 수숫점 결과의 크기 비교는 어떻게 하는가?

   조회 6849   추천 0    

기본적으로 리눅스에서 숫자는 정수형을 사용한다는 사실입니다.

그래서 계산할때는 정수형을 선언해주기도 합니다.


그런데

두 정수를 나눗셈 하고 싶을 때는

단순히 expr 를 사용하지 않습니다.


리눅스 계산기 bc 를 사용해야 합니다. ㅎㅎㅎ

여기서 scale=3은 소숫점 세자리를 의미합니다.

width=640
height=360

echo "scale=3; $width/$height" | bc -l


위의 결과를 변수에 담으려면 아래와 같이 합니다.

res=`echo "scale=3; $width/$height" | bc -l`

아니면 아래와 같이 담아도 됩니다.

res=$(echo "scale=3; $width/$height" | bc -l)


여기서 문제는 이러한 결과가 1.777 이 나오는데...

이것을 소수점 3자리 숫자인데...

리눅스 쉘 스크립트에서는 소숫점 비교를 하려고 했을 때 

죄송합니다. 정수형이 아닙니다. 라고 에러를 내버립니다.


그렇다면 소수점 비교를 할 수 없는가? 

하지만 그렇지 않습니다. 가능합니다.

위의 내용을 아래 예제로 정리합니다. 참고가 되시길 바랍니다.


width=640

height=360


res=`echo "scale=3; $width/$height" | bc -l`

echo -e $res


ratio=1.5

if [ $(echo "scale=1;$res > $ratio" | bc) -ne 0 ]

then echo -e "$ratio 보다 크다";

else echo -e "$ratio 보다 작다";

fi


예전에 나를 도와준 마틴님이란 분이 있어 그분을 기억합니다.
2cpu의 도움주신 많은 분들께 늘 감사드립니다.
☎ HP 010-9678-7900
짧은글 일수록 신중하게.
허인구마틴 2020-05
쉘 스크립트에서 소숫점 숫자를 비교하는 것은
사실 쉽지 않고 까다롭습니다.
하지만 위의  방식을 사용하면 아주 쉽게 간편하게 해결이 됩니다.

필요하신 분들에게 참고가 되시도록 글을 정리해드립니다.
허인구마틴 2020-05
이렇게 정리하기가 쉽지 않았습니다.ㅎㅎ
다양한 방법이 있긴 하지만 이게 가장 핵심적인 정리가 될 것으로 생각듭니다.
시커먼스 2020-05
RTOS 의 ksh 로 시험한 결과입니다.

# ./tt.sh
# 7777
# 5 보다 크다


QnA
제목Page 1041/5723
2015-12   1758637   백메가
2014-05   5231946   정은준1
2020-05   5281   김유중
2020-05   2238   벤자리
2020-05   4341   빅너굴맨
2020-05   2613   전진
2020-05   2912   가빠로구나
2020-05   2260   전진
2020-05   4503   허인구마틴
2020-05   3694   하나비
2020-05   7427   허인구마틴
2020-05   3054   나우소래
2020-05   9294   허인구마틴
2020-05   2824   삐돌이슬픔이
2020-05   3987   pumkin
2020-05   3916   막판대장
2020-05   3061   최시영
2020-05   5267   boy1617
2020-05   4880   song05
2020-05   3392   그모도
2020-05   4558   그모도
2020-05   3216   응무소주