如何添加到这个简单的 while 循环脚本中?

如何添加到这个简单的 while 循环脚本中?

我有一个简单的脚本,它会回显“不,再试一次。”如果用户输入“red”以外的任何内容,则继续询问。如何添加到脚本中以回显“​​没错!”如果用户确实输入“red”,然后停止?

echo -n "What is my favorite color?  "
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done

答案1

请注意,如果用户输入字符串,循环将如何结束red?这意味着当循环结束时,$favorite将是red(或者用户按下Ctrl+D并且$favorite将是空的)。

因此,您可以对代码进行的最简单的更改(忽略用户可以使用 退出循环Ctrl+D)就是在脚本末尾输出字符串:

#!/bin/sh

printf 'What is my favorite color? ' >&2
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done

echo "That's right!"

我还取消了echo -n它并用更标准的printf调用替换它,该调用另外打印到标准错误(例如应该打印提示)。如果您使用bash,则可以使用read -p 'Enter color: ' color来提示用户问题并一次性读取颜色。

如果您想正确解决该问题,请按照通常的方式进行输入验证循环:

#!/bin/sh

while true; do
    printf 'Enter color: ' >&2
    read color

    if [ "$color" = "red" ]; then
        break
    fi

    echo 'Nope, try again'
done

echo "That's correct!"

请注意,现在的循环是无限的并且仅通过语句终止break?这会阻止用户跳出循环Ctrl+D并要求他们输入正确的输入。进入后错误的输入时,系统会再次提示用户输入颜色。

这保证了循环之后,$color将是red.

答案2

你必须把你的逻辑放在 while 循环中 -

while true; do
  echo -n "What is my favorite color?  "
  read favorite
  if [[ $favorite == "red" ]]; then
     echo "That's Right"
     exit 0
  fi
  echo "No, try again."
done

相关内容