【问题标题】:WHILE loop scriptWHILE 循环脚本
【发布时间】:2018-09-14 20:11:12
【问题描述】:

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

提前致谢

【问题讨论】:

  • 我很好奇您找到了一个网站来向您展示如何执行“if”语句,但找不到任何“while 循环”列表??
  • 我不确定我应该使用“do while”还是“while do”。我尝试了这两种方法,但无法使代码正常工作。我是编程新手,所以我为这个菜鸟问题道歉,但只有在我筋疲力尽地试图让循环正确时才发布它
  • 这很酷,我们都必须从某个地方开始,但在未来,包括你的尝试,因为它可能只是对你现有工作的一个小调整,你会比一个可能的彻底解决方案更好地遵循对你来说太先进了。它还可以让响应者了解您的想法;)
  • 非常有效的观点。我应该在发布之前发布我的循环而不是清理我的代码

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


【解决方案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

【讨论】:

  • 通常,exit codes 用于故障排除。 exit 0 表示执行成功。
  • 是的,如果你不写exit 0,脚本会做什么?
【解决方案2】:

这不是提示,只是一条消息。

提示将是:

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

请注意,行尾不需要分号;是换行符,可以用分号代替。

如果您不想过早退出,则不需要退出来结束脚本。

【讨论】:

    【解决方案3】:

    请尝试以下代码。

     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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2019-12-10
      相关资源
      最近更新 更多