BC -l과 소수점을 비교하려면 어떻게 해야 합니까?

BC -l과 소수점을 비교하려면 어떻게 해야 합니까?

이것이 내가 지금까지 쉘에 가지고 있는 것입니다:

#!/bin/bash

n1=3.5
n2=3.6
n3=3.7
n=3
promedio=`echo "($n1 + $n2 + $n3)" / 3 | bc -l`
echo Las notas del estudiante son: $n1 - $n2 - $n3 y el promedio es $promedio

if [ `echo $promedio -lt 3.0 | bc -l` ]; then
echo Studen is low
elif [ `echo $promedio -gt 3.0 | bc -l`] -o [ `echo $promedio -lt 3.5 | bc`]; then
echo Student is ok
elif [ $promedio -gt 3.5 && -lt 4.0 ]; then
echo Student is good
elif [ $promedio -gt 4.0 ]; then
echo Student is excellent

fi

내가 무엇을 하려는지 알 수 있나요? bc -l 부분에서 혼란스러워서 이를 정확히 수행하는 방법을 알아내려고 노력 중입니다. 이 상황에서는 어떻게 해야 합니까? 3.0보다 큰 결과를 비교 $promedio하고 다른 것과 마찬가지로 무언가를 에코하려고 합니다. 먼저 다음과 같은 오류가 발생했습니다.

./estudiante.sh: line 12: [: 3.60000000000000000000: integer expression expected
./estudiante.sh: line 14: [: missing `]'
./estudiante.sh: line 16: [: 3.60000000000000000000: integer expression expected

그리고 지금:

(standard_in) 1: syntax error
(standard_in) 1: syntax error
(standard_in) 1: syntax error
Student is ok

내가 이 일을 하고 있는 걸까? 아니면 다른 일을 해야 하나요? 감사합니다!

답변1

bc숫자 비교에 >및 를 사용합니다 .<

bc또한 진리값을 출력한다는 점에 유의하세요 .

$ echo "2 > 1" | bc
1
$ echo "2 > 3" | bc
0

당신은 이것을 해야 합니다:

if [[ $(echo "$promedio < 3.0" | bc -l) == "1" ]]; then
    echo Studen is low
elif [[ $(echo "3.0 <= $promedio && $promedio < 3.5" | bc) == "1" ]]; then
    ...

또는 "0"을 "false"로 처리하고 0이 아닌 것을 "true"로 처리하는 bash의 산술 조건을 사용할 수 있습니다.

if (( $(echo "$promedio < 3.0" | bc -l) )); then
    echo Studen is low
elif (( $(echo "3.0 <= $promedio && $promedio < 3.5" | bc) )); then
    ...

관련 정보