これまでのところ、シェルには次のものがあります:
#!/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」を「false」、ゼロ以外の値を「true」として処理することもできます。
if (( $(echo "$promedio < 3.0" | bc -l) )); then
echo Studen is low
elif (( $(echo "3.0 <= $promedio && $promedio < 3.5" | bc) )); then
...