Что я должен сделать для сравнения тех десятичных чисел с 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

Можно ли видеть то, что я пытаюсь сделать? Я запутался в до н.э-l часть, и я пытаюсь выяснить, как сделать это точно. Что я должен сделать в этой ситуации? Я пытаюсь сравнить результат $promedio больше, чем 3,0 и эхо что-то, как другие. Сначала у меня были некоторые ошибки как:

./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
задан 13 November 2019 в 19:13

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" как "ложь" и ненулевой как "верное":

if (( $(echo "$promedio < 3.0" | bc -l) )); then
    echo Studen is low
elif (( $(echo "3.0 <= $promedio && $promedio < 3.5" | bc) )); then
    ...
2
ответ дан 7 December 2019 в 13:13

Другие вопросы по тегам:

Похожие вопросы: