Bash RegEx用于检查用户输入的浮点数

Sam*_*Web 9 regex bash expression bash4

我对bash编程比较陌生,我目前正在创建一个简单的计算器.

它需要使用浮点数并检查它们是否如此.

我有一个checkNumbers函数:

function checkNumber {

    regExp=[0-9]

    if [ $testNo =~ $regExp ]
    then
        echo "That is a number!"
        let check=1
    else
        echo "Damn! Not A Number!"
    fi
}
Run Code Online (Sandbox Code Playgroud)

我让用户输入这样的数字:

while [ $check -eq 0]
do
    echo "Please enter a number
    read testNo
    echo ""
    checkNumber
done
Run Code Online (Sandbox Code Playgroud)

这不起作用,我得到这个错误:

./calculator.sh:39行:[:=〜:二元运算符预期

第39行是:

if [ $testNo =~ $regExp ] 
Run Code Online (Sandbox Code Playgroud)

我尝试了很多正则表达式,如:

^*[0-9]*$
Run Code Online (Sandbox Code Playgroud)

^*[0-9]\.[0.9]*$
Run Code Online (Sandbox Code Playgroud)

等等

另外,我已经结合其他方式执行检查:

case $testNo
in
    ^*[0-9]*$) echo "That is a number!";;
    *) echo "Error! Not a number!";;
esac
Run Code Online (Sandbox Code Playgroud)

if [ $testNo = ^*[0-9]*$ ]
then
    echo "etc etc"
else
    echo "oops"
fi
Run Code Online (Sandbox Code Playgroud)

我还需要这个来处理浮点数.

有人可以让我知道我是怎么回事吗?

Chr*_*our 11

此正则表达式^[-+]?[0-9]+\.?[0-9]*$将仅匹配带有可选项的数字.:

$ echo 30 | grep -Eq '^[-+]?[0-9]+\.?[0-9]*$' && echo Match
Match

$ echo 30.10 | grep -Eq '^[-+]?[0-9]+\.?[0-9]*$' && echo Match
Match

$ echo 30. | grep -Eq '^[-+]?[0-9]+\.?[0-9]*$' && echo Match
Match

$ echo +30 | grep -Eq '^[-+]?[0-9]+\.?[0-9]*$' && echo Match
Match

$ echo -30 | grep -Eq '^[-+]?[0-9]+\.?[0-9]*$' && echo Match
Match
Run Code Online (Sandbox Code Playgroud)

^*[0-9]想当你尝试过你想要的时候^[0-9]*

Rexeplanation:

^       # Match start of string
[-+]?   # Match a leading + or - (optional)
[0-9]+  # Match one or more digit
\.?     # Match a literal . (optional, escaped)
[0-9]*  # Match zero or more digits
$       # Match the end of the string
Run Code Online (Sandbox Code Playgroud)

注意:这匹配数字后跟一个.类似的30.,不确定这是否可以接受.

编辑:不要引用 regex

testNo=30.00

if [[ $testNo =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]; then 
    echo Match
fi

>>> Match
Run Code Online (Sandbox Code Playgroud)