我正在尝试验证输入变量的值,并提示用户输入有效值,直到获得有效的输入(“1”或“2”)。我试过:
while option not in 1 2
do :
read -p "Please choose an option" option
done
如何在 bash 中完成此操作?
经典的做法是:
while ! { test "$option" = 1 || test "$option" = 2; } do ...
但更简洁的方法是使用 case 语句:
while :; do
case "$option" in
1|2) break ;;
*) ... ;;
esac
done
使用内置的
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
在
bash
中,可以使用模式匹配来测试$option
:
while [[ $option != [12] ]]; do
read -p "Please choose an option: " option
done
我会做类似的事情:
#!/bin/bash
while : ; do
echo "Please choose an option"
read val
[[ $val != 1 && $val != 2 ]] || break
done
或者,如果您计划评估更多选项,请使用案例:
#!/bin/bash
while true; do
read -p "Please choose an option" option
case "$option" in
[12]) break
;;
*) echo "whatever"
esac
done
您可以使用
while
列表构造和 {...}
:来使用此
shell globbing
条件
option=0
while [[ $(echo {1,2}) != *"$option"* ]]; do
read -p "Please choose an option: " option
done
我认为这是最常见的方式
while [[ "$option" -ne 1 ]] || [[ "$option" -ne 2 ]]; do
read -p "Please choose an option" option
done