在bash中请求用户输入以设置变量

时间:2014-09-17 08:31:14

标签: bash shell

我希望有一些东西会询问用户 - "您希望加载哪种环境?" - 有效的回应是"生产"或者"开发"。如果给出的答案不匹配,则重新询问问题。我希望它设置$ 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

在我运行它时似乎没有设置变量,所以我不知道我做错了什么。此外,如果没有给出有效的回复,我如何让它重新提问?

2 个答案:

答案 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)。现在,代码可以继续使用您需要的任何内容,您可以设置变量。