我有一个简单的脚本,它会回显“不,再试一次。”如果用户输入“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