我正在尝试编写一个脚本,该脚本将继续提示用户输入成绩,直到用户输入999。
如果用户输入90或更多,则回显A.如果用户输入80或更多,则回显B.如果用户输入70或更多,则回显C.否则回显失败。
我认为这需要一个WHILE脚本。以下是我目前的代码
#!/bin/bash
# Asuume that the first paramter is going to be a grade
if [ $# -lt 1 ];
then
echo -n "Please pass a a grade "
fi
gr=$1
if [ $gr -ge 90 ]
then
echo "A"
elif [ $gr -ge 80 ]
then
echo "B"
elif [ $gr -ge 70 ]
then
echo "C"
else
echo "Failed"
fi
exit 0
脚本提示我,但在我输入1年级后关闭。
提前致谢
答案 0 :(得分:1)
这不是提示,只是一条消息。
提示将是:
read -p "Please pass a grade: " gr
但是这与你的gr=$1
发生了冲突,所以把它放到了一个else块中:
if [ $# -lt 1 ]
then
read -p "Please pass a grade: " gr
else
gr=$1
fi
请注意,您不需要在行尾添加分号;它是换行符,可以用分号代替。
如果您不想提前退出,则不需要退出来结束脚本。
答案 1 :(得分:1)
由于您要提示用户输入成绩直到他输入999,您应该使用read
而不是命令行参数。由于bash没有do-while循环,我们可以使用while来模拟它的行为,如下所示:
#!/bin/bash
read -p "Please pass a grade " gr
while [ $gr -ne 999 ]; do
if [ $gr -ge 90 ]
then
echo "A"
elif [ $gr -ge 80 ]
then
echo "B"
elif [ $gr -ge 70 ]
then
echo "C"
else
echo "Failed"
fi
read -p "Please pass a grade " gr
done
exit 0
答案 2 :(得分:0)
请尝试以下代码。
while true
do
read -p "Please pass a grade:" gr
if [ ${gr} -eq 999 ]
then
exit 0
elif [ ${gr} -ge 90 ]
then
echo "A"
elif [ ${gr} -ge 80 ]
then
echo "B"
elif [ ${gr} -ge 70 ]
then
echo "C"
else
echo "Failed"
fi
done