Linux 我的Bash脚本工作不正常

Linux 我的Bash脚本工作不正常,linux,bash,ubuntu,Linux,Bash,Ubuntu,我正在制作一个bash脚本,根据用户输入的内容显示等级。然而,它返回了错误的等级,我不明白为什么。我把代码贴在下面。我也不熟悉bash脚本 #!/bin/bash echo "Enter assignment mark (0 to 40): " read assignment echo "Enter Test1 mark (0 to 15): " read test1 echo "Enter Test2 mark (1 to 15): " read test2 echo "Enter Fina

我正在制作一个bash脚本,根据用户输入的内容显示等级。然而,它返回了错误的等级,我不明白为什么。我把代码贴在下面。我也不熟悉bash脚本

#!/bin/bash

echo "Enter assignment mark (0 to 40): "
read assignment
echo "Enter Test1 mark (0 to 15): "
read test1
echo "Enter Test2 mark (1 to 15): "
read test2
echo "Enter Final Exam mark (1 to 30): "
read final

(( sum = ( $assignment / 40 * 40 ) + (  $test1 / 15 *15 ) + ( $test2 / 15 * 15 ) + ( $final / 30 * 30 ) ))

if [ $sum -ge "90" ] && [ $sum -le "100" ]
then
echo "Your final grade is an A+."
elif [ $sum -ge "85" ] && [ $sum -le "89" ]
then
echo "Your final grade is a A."
elif [ $sum -ge "80" ] && [ $sum -le "84" ]
then
echo "Your final grade is a A-."
elif [ $sum -ge "77" ] && [ $sum -le "79" ]
then
echo "Your final grade is a B+."
elif [ $sum -ge "73" ] && [ $sum -le "76" ]
then
echo "Your final grade is a B."
elif [ $sum -ge "70" ] && [ $sum -le "72" ]
then
echo "Your final grade is a B-."
elif [ $sum -ge "67" ] && [ $sum -le "69" ]
then
echo "Your final grade is a C+."
elif [ $sum -ge "63" ] && [ $sum -le "66" ]
then
echo "Your final grade is a C."
elif [ $sum -ge "60" ] && [ $sum -le "62" ]
then
echo "Your final grade is a C-."
elif [ $sum -ge "57" ] && [ $sum -le "59" ]
then
echo "Your final grade is a D+."
elif [ $sum -ge "53" ] && [ $sum -le "56" ]
then
echo "Your final grade is an D."
elif [ $sum -ge "50" ] && [ $sum -le "52" ]
then
echo "Your final grade is an D-."
elif [ $sum -le "49" ] 
then
echo "Your final grade is an F. Sorry!"
fi

我不明白这句话:

(( sum = ( $assignment / 40 * 40 ) + (  $test1 / 15 *15 ) + ( $test2 / 15 * 15 ) + ( $final / 30 * 30 ) ))
用同一个数字除和乘似乎没有用。为什么不改成

(( sum =  $assignment + $test1 + $test2 + $final ))
编辑:此代码有效。享受;-)


你能澄清什么是“工作不正常”吗?你看到了什么?你期望什么?求和线应该计算什么?为什么是/40*40?为什么不把这些数字相加,而不是用同一个数字相乘和相乘对不起,我忘了加上它的作用了。它接受用户输入的分数,并在100分中显示分数。作业分数为40分,占成绩的40%,测试1和测试2分数为15分,占成绩的15%,期末考试分数为30分,占成绩的30%(40+15+15+30=100)。最后的分数是100分,这就是为什么我要把分数乘以100分。我可以输入40、14、14、30,脚本显示“you got a b+”,而它应该是a/a+。所以数学似乎是错的,但我不明白为什么。@Richard-你知道如果
$assignment<40
,那么
$assignment/40
将始终是
0
,对吗?shell做整数数学,而不是浮点数学(至少没有额外的工作…)。是的,我想这是可行的,虽然我有乘法,因为赋值分数占总分数的40%,test1分数占15%,test2分数占15%,期末考试分数占总分数的30%,但我想这是不必要的。无论如何,谢谢。实际上这不起作用,因为它没有考虑到每个标记的权重。据我所知,你是通过点数(40,15,15,30)来定义权重的,所以我没有看到问题。你知道如果
$assignment<40
,那么
$assignment/40
将始终是
0
,对吗?shell进行整数运算,而不是浮点运算(至少在没有额外工作的情况下…)。我没有在代码中分割任何内容,而且,[考虑到@Richard需求],这个脚本适合我。
#!/bin/bash

echo "Enter assignment mark (0 to 40): "
read assignment
echo "Enter Test1 mark (0 to 15): "
read test1
echo "Enter Test2 mark (1 to 15): "
read test2
echo "Enter Final Exam mark (1 to 30): "
read final

sum=$(( assignment  +  test1  +  test2 + final  ))

if [[ $sum -ge 90 ]] && [[ $sum -le 100 ]]
then
echo Your final grade is an A+.
elif [[ $sum -ge 85 ]] && [[ $sum -le 89 ]]
then
echo Your final grade is a A.
elif [[ $sum -ge 80 ]] && [[ $sum -le 84 ]]
then
echo Your final grade is a A-.
elif [[ $sum -ge 77 ]] && [[ $sum -le 79 ]]
then
echo Your final grade is a B+.
elif [[ $sum -ge 73 ]] && [[ $sum -le 76 ]]
then
echo Your final grade is a B.
elif [[ $sum -ge 70 ]] && [[ $sum -le 72 ]]
then
echo Your final grade is a B-.
elif [[ $sum -ge 67 ]] && [[ $sum -le 69 ]]
then
echo Your final grade is a C+.
elif [[ $sum -ge 63 ]] && [[ $sum -le 66 ]]
then
echo Your final grade is a C.
elif [[ $sum -ge 60 ]] && [[ $sum -le 62 ]]
then
echo Your final grade is a C-.
elif [[ $sum -ge 57 ]] && [[ $sum -le 59 ]]
then
echo Your final grade is a D+.
elif [[ $sum -ge 53 ]] && [[ $sum -le 56 ]]
then
echo Your final grade is an D.
elif [[ $sum -ge 50 ]] && [[ $sum -le 52 ]]
then
echo Your final grade is an D-.
elif [[ $sum -le 49 ]] 
then
echo Your final grade is an F. Sorry!
fi