我正在尝试创建一个循环,以便问题不断出现,直到用户正确输入数字为止。我尝试这样做,但我不知道我做错了什么。任何帮助,将不胜感激。
#!/bin/sh
read -p "Welcome to the Draw Program. Please enter a number in-between 5-20: " input
while [ $input -lt 5 ] && [ $input -gt 20 ]
do
echo "Your number wasn't within the range. Please re-enter"
done
答案1
一个数怎么能同时小于5和大于20?我想你想要:
while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]
此外,您还必须在循环中重新提示输入数字。
while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]
do
read -rp "Your number wasn't within the range. Please re-enter" input
done
仅供参考,POSIX 未指定用于读取的 -p 选项,因此不保证所有形式的 sh 都支持它。如果该程序旨在跨多个晦涩的操作系统使用并且可移植性至关重要,您可以执行以下操作:
printf '%s' "Your number wasn't within the range. Please re-enter: "
read -r input
答案2
你可能会发现这样写更直观、更清晰:
while ! (( (5 <= input) && (input <= 20) )); do
echo "Your number wasn't within the range. Please re-enter"
done
通过上面的内容,您可以一眼看出它正在测试input
介于 和 之间5
,20
因为这就是变量名称input
在代码中所在的位置。