2013-03-26 120 views
0

我正在製作一個bash腳本,顯示基於用戶輸入的等級。但是,它正在返回錯誤的等級,我無法弄清楚爲什麼。我發佈了下面的代碼。我對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 
+0

你能澄清一下「不正常工作」的含義嗎?你看到了什麼?你能指望什麼? – 2013-03-26 15:18:30

+0

總和線假設計算的是多少?爲什麼/ 40 * 40? – nhed 2013-03-26 15:23:30

+0

爲什麼不只是總結數字而不是乘以相同的數字呢? :D – 2013-03-26 15:26:22

回答

1

我不明白這行:

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

劃分和相同數量的倍增,似乎是無用的。爲什麼不改變它

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

編輯:此代碼的工作原理。享受;-)

#!/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 
+0

是的,我猜這是有效的,但我有乘法,因爲賦值標記值40%,test1標記值15 %,測試2標記價值15%,期末考試總分達到總分的30%,但我想這是沒有必要的。不管怎麼說,還是要謝謝你。 – Richard 2013-03-26 15:36:40

+0

@Richard,已添加工作代碼。 – ophintor 2013-03-26 15:39:47

+0

Acutally這不起作用,因爲它沒有考慮到每個商標的重量。 – Richard 2013-03-26 15:43:23