adb shell regular expression doesn't work as tested locally

1.2k Views Asked by At

First, sorry if my question is obscure or in an inconvenient format. This is my first post here :D.

My issue is that I have a script, let's say test.sh which reads an input, and validates if it's a positive integer (reg ex used from this post: BASH: Test whether string is valid as an integer?):

#!/bin/sh
echo -n " enter number <"
read num

if [[ $num =~ ^-?[0-9]+$ ]]     #if num contains any symbols/letters 
then                            # anywhere in the string
  echo "not a positive int"
  exit
else
  echo "positive int read"
fi

I am running this script on my android device (Xiaomi Mi3 w) using adb shell and the error: syntax error: =~ unexpected operator keeps displaying.

First, is my regex even correct? Second, any hints on how I can overcome this syntax error?

3

There are 3 best solutions below

0
On BEST ANSWER

I had to use ksh expression as shown below to get this to work.

case $num in
    +([0-9])*(.)*([0-9]) )
          # Variable positive integer
      echo "positive integer"
          ;;
    *) 
          # Not a positive integer
      echo "NOPE"
      exit
          ;;
esac
0
On

This is a GNU bash POSIX regular expression. In Korn Shell, you can use extglob regular expressions to the same effect:

if [[ $num = ?(-)+([0-9]) ]]; then
    …

See the section “File name patterns” in the manpage for details.

1
On

The default shell in Android is mksh. It is not 100% compatible with bash. So do not expect all bash recipes to work without changes.

For the description of features supported by mksh - read its manual page.