而真循环请求无限循环

时间:2017-03-20 00:25:08

标签: shell

我设置了一个while循环,它应该要求用户键入0到10之间的数字,然后根据输入给出各种响应。但是,在执行程序时,如果输入的不是0,5或10,它会无限循环下面的一个响应,而不是显示一次。

INPUTMOD=0
echo "Please enter a number from 0-10, inclusive"
read INPUTMOD

while true
do
    if [ "$INPUTMOD" -lt 0 ] || [ "$INPUTMOD" -gt 10 ]; then
        echo "Please enter a number between 0 and 10, inclusive"
    elif [ "$INPUTMOD" -eq 0 ] || [ "$INPUTMOD" -eq 5 ] || [ "$INPUTMOD" -eq 10 ]; then
        echo "Your input is congruent with _ mod 5 = 0. Congratulations!"
        break
    else
        echo "Please enter a number between 0 and 10, inclusive."
    fi
done

此循环的总体目标是不断提示用户输入0到10之间的数字,直到它们输入0,5或10(输入mod 5 = 0)。当按下非数字键时,它将无限提示用户输入正确的数字。

非常感谢有关此事的任何和所有帮助!

编辑:正如我的教授所指示的那样,if if,else和gt都是必需的。

2 个答案:

答案 0 :(得分:1)

你混淆了一些逻辑:

if [ "$INPUTMOD" -lt 0 ] && [ "$INPUTMOD" -gt 10 ]; then

应该是

if [ "$INPUTMOD" -lt 0 ] || [ "$INPUTMOD" -gt 10 ]; then

因为同一时间内任何数字都不能小于0且大于10。 并且

elif [ "$INPUTMOD" -eq 0 ] || [ "$INPUTMOD" -eq 5 ] [ "$INPUTMOD" -eq 10 ]; then

不完整。你到底错过了什么,确定会发现..;)

然后:你的while循环有望永远运行。你不是说不仅要求一个新号码而且要接受一个新号码是好事吗?

答案 1 :(得分:0)

如果条件错误,那么你必须要求提供号码,

只需更改类似的代码,

done语句

之前添加以下语句
read INPUTMOD

那就是它。

所以现在它不会连续问一个数字, 它会要求一次并等待您的输入