成绩计算器脚本Linux帮助



有人能帮我写代码吗?当我运行我的脚本时,我总是得到F.

#!/bin/bash
echo "Enter your percentage to see grade letter"
read grade
if [ $grade -ge 60 ]; then
echo "Your Grade F"
elif [ $grade -ge 60 ] || [ $grade -le 69 ]; then
echo "Your grade D"
elif [ $grade -ge 70 ] && [ $grade -le 79 ]; then
echo "Your grade C"
elif [ $grade -ge 80 ] && [ $grade -le 89 ]; then
echo "Your grade B"
elif [ $grade -ge 90 ] && [ $grade -le 100 ]; then
echo "Your Grade is A"
else
echo "try again"
fi

您的代码中有一个逻辑错误。你的第一次测试错了。它测试所有大于或等于60的值,并将其设为F。这可以防止对这些值进行其余测试。

你的第二次测试也是错误的;您使用的是OR(||(而不是AND(&&(。

您的上一次测试可能会减少,因为所有大于或等于90的值都是A,所以没有必要进行第二次测试。

如果我在写代码,我个人会测试更高的值并向下计算,但这是你的选择。以下内容应该有效。

#!/bin/bash
echo "Enter your percentage to see grade letter"
read grade
if [ $grade -le 59 ]; then
echo "Your Grade F"
elif [ $grade -ge 60 ] && [ $grade -le 69 ]; then
echo "Your grade D"
elif [ $grade -ge 70 ] && [ $grade -le 79 ]; then
echo "Your grade C"
elif [ $grade -ge 80 ] && [ $grade -le 89 ]; then
echo "Your grade B"
elif [ $grade -ge 90 ]; then
echo "Your Grade is A"
else
echo "try again"
fi

使用case语句的另一种方法可以是

read -r -p 'Enter your percentage to see grade letter: ' percent
case $percent in
[0-9] | [0-5][0-9] ) echo 'Your Grade F';;
6[0-9]             ) echo 'Your Grade D';;
7[0-9]             ) echo 'Your Grade C';;
8[0-9]             ) echo 'Your Grade B';;
9[0-9] | 100       ) echo 'Your Grade A';;
*) echo 'Try again'
esac

以下是我的操作方法。

#!/bin/bash
# Get the grade
read -rp "Enter your percentage to see grade letter: " grade
# Test the input to make sure it's a number,
# and exit with an error message if it isn't
[[ "$grade" =~ ^[0-9]+$ ]] || { echo "Please enter an integer." ; exit; }
# Test the number, print the grade, and exit
[[ "$grade" -le 49 ]] && { echo "You want to go home and re-think your life." ; exit; }
[[ "$grade" -le 59 ]] && { echo "Your Grade: F" ; exit; }
[[ "$grade" -le 69 ]] && { echo "Your grade: D" ; exit; }
[[ "$grade" -le 79 ]] && { echo "Your grade: C" ; exit; }
[[ "$grade" -le 89 ]] && { echo "Your grade: B" ; exit; }
[[ "$grade" -ge 90 ]] && { echo "Your Grade: A" ; exit; }

我不确定它是否比使用if-elif-ficase更有效率。我确信它不是那么漂亮。但它只测试$grade,直到它被击中,然后它停止了,这对我很有吸引力

我很想把";这是一个数字吗"在一个循环中进行测试,这样如果输入错误,就不必再次调用脚本,但我抵制住了诱惑。

(我是bash脚本的新手,所以我欢迎批评。(

相关内容

最新更新