0

我正在尝试验证用户输入

if ! [[ "$operator" =~ ("[+-/*]") ]] ; then     # validate user input to include decimals
        exec >&2; echo "error: Not a valid number, please try again";
        echo
else
        break
        echo
fi

尝试了多种组合但不起作用?Ypu 的帮助将不胜感激!

4

3 回答 3

2

两个问题:

  • 丢失正则表达式周围的引号和括号;它们被认为是正则表达式的一部分。在这种情况下也不需要引号$operator,尽管它们没有害处。
  • -是 中的一个特殊字符[],用于a-z. 把它作为第一个或最后一个字符来解决这个问题。

所以:

if ! [[ $operator =~ [-+/*] ]] ; then

我认为习惯上写!在里面[[ ]],但要么工作。

于 2013-01-20T15:03:26.560 回答
0
sgeorge-mn:~ sgeorge$ cat validate.sh 
OPERATOR=$1
REGEX='[+*-/]';
if ! [[ $OPERATOR =~ $REGEX ]]; then
        echo "Not valid input"
else
        echo "Valid input"
fi

sgeorge-mn:~ sgeorge$ bash validate.sh '-'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '*'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '/'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '+'
Valid input

sgeorge-mn:~ sgeorge$ bash validate.sh 's'
Not valid input

sgeorge-mn:~ sgeorge$ bash validate.sh '132'
Not valid input
于 2013-01-20T17:49:43.147 回答
0
if ! [[ "$operator" =~ [-+]?[0-9]* ]] ; then
  ...
  ...
fi
于 2013-01-20T14:56:34.797 回答