如何检查 bash 中多个接受的选项之一? [重复]

问题描述 投票:0回答:7

我正在尝试验证输入变量的值,并提示用户输入有效值,直到获得有效的输入(“1”或“2”)。我试过:

while option not in 1 2
do :
    read -p "Please choose an option" option
done

如何在 bash 中完成此操作?

bash shell
7个回答
5
投票

经典的做法是:

while ! { test "$option" = 1 || test "$option" = 2; } do ...

但更简洁的方法是使用 case 语句:

while :; do
    case "$option" in 
    1|2) break ;;
    *) ... ;;
    esac
done

5
投票

使用内置的

select

$ cat select.sh
#!/bin/bash

options=("Option 1" "Option 2")

echo "Please choose an option:"
select option in "${options[@]}"; do
        [ -n "${option}" ] && break
done
echo "You picked: ${option}"

 

$ ./select.sh
Please choose an option:
1) Option 1
2) Option 2
#? 3
#? xyz
#? 2
You picked: Option 2

3
投票

bash
中,可以使用模式匹配来测试
$option

while [[ $option != [12] ]]; do
    read -p "Please choose an option: " option
done

2
投票

我会做类似的事情:

#!/bin/bash

while : ; do
    echo "Please choose an option"
    read val
    [[ $val != 1 && $val != 2 ]] || break
done

1
投票

或者,如果您计划评估更多选项,请使用案例:

#!/bin/bash

while true; do
  read -p "Please choose an option" option

  case "$option" in
    [12]) break
          ;;
    *)    echo "whatever"
  esac
done

0
投票

您可以使用

while
列表构造和
{...}
:
 来使用此 
shell globbing

条件
option=0

while [[ $(echo {1,2}) != *"$option"* ]]; do
    read -p "Please choose an option: " option
done

0
投票

我认为这是最常见的方式

while [[ "$option" -ne 1 ]]  || [[ "$option" -ne 2 ]]; do
          read -p "Please choose an option" option
done
© www.soinside.com 2019 - 2024. All rights reserved.