我希望有一些东西会询问用户 - "您希望加载哪种环境?" - 有效的回应是"生产"或者"开发"。如果给出的答案不匹配,则重新询问问题。我希望它设置$ production变量,以便稍后可以运行不同的代码部分。这是我能做的最接近的事情:
read -n1 -p "Which environment would you like to load? [production,development]" doit
case $doit in
production) echo $production=1 ;;
development) echo $production=0 ;;
*) echo ... ;;
esac
在我运行它时似乎没有设置变量,所以我不知道我做错了什么。此外,如果没有给出有效的回复,我如何让它重新提问?
答案 0 :(得分:1)
问题是您使用的read -n1
会在输入中接受只有一个字符。
使用:
read -r -p "Which environment would you like to load? [production,development]" doit
在阅读时使用-i 'defaultVal'
选项设置默认值:
read -r -ei 'production' -p "Which environment would you like to load? [production,development]" doit
答案 1 :(得分:1)
如果我理解正确,这就是你要找的东西:
#!/bin/bash
while true; do
read -p "Which environment would you like to load? [production,development]" ANS
case $ANS in
'production')
production=1
break;;
'development')
production=0
break;;
*)
echo "Wrong answer, try again";;
esac
done
echo "Variable value:$production"
你开始一个无限循环来询问用户输入,直到它有效。
如果它无效,则转到默认*)
并告知用户它是错误的,然后再次询问,继续循环。
找到匹配项后,您需要设置生产变量并退出循环(使用break
)。现在,代码可以继续使用您需要的任何内容,您可以设置变量。