我试图检查输入变量的值。例如,while仅在选项的值为1或2时才存在。
while option not in 1 2
do :
read -p "Please choose an option" option
done
如何在bash中完成此操作?
[重复] 这不是重复的,因为标记为重复的那个考虑比较两个字符串,而一端没有多个选项。
答案 0 :(得分:4)
经典的方式是:
while ! { test "$option" = 1 || test "$option" = 2; }; do ...
但更简洁的方法是使用案例陈述:
while :; do
case "$option" in
1|2) break ;;
*) ... ;;
esac
done
答案 1 :(得分:2)
使用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
答案 2 :(得分:2)
在bash
中,您可以使用模式匹配来测试$option
:
while [[ $option != [12] ]]; do
read -p "Please choose an option: " option
done
答案 3 :(得分:1)
我做了类似的事情:
#!/bin/bash
while : ; do
echo "Please choose an option"
read val
[[ $val != 1 && $val != 2 ]] || break
done
答案 4 :(得分:1)
或者,如果您打算评估更多选项,请使用大小写:
#!/bin/bash
while true; do
read -p "Please choose an option" option
case "$option" in
[12]) break
;;
*) echo "whatever"
esac
done
答案 5 :(得分:0)
您可以使用while
列表构建和{...}
来使用此shell globbing
条件:
option=0
while [[ $(echo {1,2}) != *"$option"* ]]; do
read -p "Please choose an option: " option
done
答案 6 :(得分:0)
我认为这是最常见的方式
while [[ "$option" -ne 1 ]] || [[ "$option" -ne 2 ]]; do
read -p "Please choose an option" option
done