Regex 正则表达式和输入验证Bash

Regex 正则表达式和输入验证Bash,regex,bash,Regex,Bash,我正在尝试验证用户输入 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

我正在尝试验证用户输入

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的帮助

两个问题:

if ! [[ "$operator" =~ [-+]?[0-9]* ]] ; then
  ...
  ...
fi
  • 丢失正则表达式周围的引号和括号;它们被认为是正则表达式的一部分。在本上下文中,
    $operator
    周围的引号也不需要,尽管它们没有害处
  • -
    []
    中的一个特殊字符,用于
    a-z
    之类的东西。将其作为解决此问题的第一个或最后一个字符
因此:


我认为写
是一种习惯
[[]]
中,但两者都可以。

您是要接受注释和输出所暗示的数字,还是要接受正则表达式所暗示的运算符!外部的否定会否定内部的一切,例如![[-d文件| |-r文件]]不同于[[!-d文件| |-r文件]]
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
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