我該怎麼做才能將這些小數與 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 部分感到困惑,我試圖弄清楚如何準確地做到這一點。在這種情況下我該怎麼辦?我正在嘗試比較$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

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
    ...

或者您可以使用 bash 的算術條件,它將“0”處理為“假”,將非零處理為“真”:

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

相關內容