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)