WHILE循环脚本

时间:2018-04-05 05:48:03

标签: bash shell unix while-loop do-while

我正在尝试编写一个脚本,该脚本将继续提示用户输入成绩,直到用户输入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年级后关闭。

提前致谢

3 个答案:

答案 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 
相关问题