我的脚本中有一个输入,它写入运行某些软件所需的文件,但是该软件只允许两个可能的选项之一,即LO和LDO。
我已经编写的输入位于以下代码的顶部,底部的代码是建议我要操作的代码。
我想问“重叠(LO或LDO):”和一个错误消息,如果其中一个选项没有输入并重复该步骤,而不是再次遍历整个脚本,而不是搜索0到9之间的值。
from我可以收集到什么,我需要更改^以包含LO和LDO,但是我不知道标点符号是什么,也不知道如何做到
### My Script ###
read -p "Overlap (LO or LDO): " OVERLAP
### Recommended Script ###
#!bin/bash
number=""
while [[ ! $number =~ ^[0-9]+$ ]]; do
echo Please enter your age
read number
done
echo You are $number years old发布于 2019-06-15 22:01:22
输入和验证循环通常如下所示:
while true; do
read -p 'Overlap (LO or LDO): ' overlap
case $overlap in
LO|LDO) # ok
break
;;
*) # not ok
echo 'Please enter LO or LDO' >&2
esac
done也就是说,当你验证答案是正确的时,你就有了一个无限循环。
很明显,你也可以这样做
while true; do
read -p 'Overlap (LO or LDO): ' overlap
if [ "$overlap" = LO ] || [ "$overlap" = LDO ]; then
# ok
break
fi
# not ok
echo 'Please enter LO or LDO' >&2
done或者,对于具有select的shell:
echo 'Select overlap:' >&2
select overlap in LO LDO; do
case $REPLY in
[12]) # ok
break
;;
*) # not ok
echo 'Please select LO or LDO' >&2
esac
done发布于 2019-06-15 20:55:56
您可以使用&&和操作符:
#! /bin/bash
overlap=""
first=1
while [[ $overlap != LO && $overlap != LDO ]] ; do
if [[ ! $first ]] ; then
echo 'Wrong answer, please answer LO or LDO!' >&2
fi
read -p 'Overlap (LO or LDO): ' overlap
unset first
done您还可以使用regex:
until [[ $overlap =~ ^LD?O$ ]] ; do
...^与字符串的开头匹配。?使前面的内容可选$与字符串的末尾匹配。发布于 2019-06-15 22:10:15
另一种方法
while read -p "Overlap (LO or LDO): " overlap;
do
[[ "$overlap" =~ ^LD?O$ ]] && break || echo "Not LO or LDO"
donehttps://unix.stackexchange.com/questions/525181
复制相似问题