如何在Linux中选择出来

时间:2011-03-15 18:52:27

标签: linux bash user-input

我想从用户那里获取输入,这可能是任何给定的选项,我尝试使用选择,但它只是进入循环,没有出来,是否有我可以让它出来并在用户输入正确的选项后继续,这里是示例代码:

select envir in "prod" "uat" "dev"; do
    echo $envir
done

//continue with the script
echo "out of select"

一旦用户选择了任何可用选项,它就会出现并继续使用脚本,如果用户输入了其他内容,它应该继续提示。

4 个答案:

答案 0 :(得分:3)

select envir in "prod" "uat" "dev"; do
    echo $envir
    if [ $envir == "prod" ] || [ $envir == "uat" ] || [ $envir == "dev" ]
    then
        break
    fi
done

//continue with the script
echo "out of select"

答案 1 :(得分:2)

来自bash(1)手册页:

......列表已执行 在每次选择之后直到执行break命令。 select的退出状态是 列表中执行的最后一个命令的退出状态,如果没有命令执行则返回零 cuted。 ...

换句话说,当$ envir为非空时执行“break”语句。

答案 2 :(得分:1)

我会这样编写上面的脚本:

#!/bin/bash
declare -a opts=("prod" "uat" "dev")

echo "control-D to exit"
select envir in "${opts[@]}"; do
    echo "envir=$envir"
    found=0
    for elem in "${opts[@]}"; do
       if [ "$elem" = "$envir" ]; then
          found=1
          break
       fi
    done
    if [ "$found" -eq 1 ]; then
       break
    fi
done

echo "out of select"

这样您的关键字就可以在一个地方处理。每次在“prod”“uat”“dev”列表中添加新单词时,您无需在2个位置进行更改。

您还可以从外部文件中读取单词列表,并在此处将其分配给bash数组变量opts。

答案 3 :(得分:0)

谢谢Brian。根据您的意见,这就是我能够做到的:

select envir in "prod" "uat" "dev"; do
    echo $envir
    if [ "$envir" != "" ]
    then
        break
    fi
done

//continue with the script
echo "out of select"