0

首先,对不起,如果我的问题含糊不清或格式不便。这是我在这里的第一篇文章:D。

我的问题是我有一个脚本,假设test.sh它读取输入,并验证它是否为正整数(本文使用的 reg ex: BASH:测试字符串是否作为整数有效?):

#!/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

我正在使用 adb shell 在我的 android 设备(小米 Mi3 w)上运行此脚本,并且出现错误:语法错误:=~意外操作符一直显示。

首先,我的正则表达式是否正确?其次,关于如何克服这个语法错误的任何提示?

4

3 回答 3

1

Android 中的默认 shell 是mksh. 它不是 100% 兼容的bash。所以不要指望所有bash的食谱都能在不改变的情况下工作。

有关所支持的功能的描述mksh- 请阅读其手册页

于 2015-07-02T23:44:07.907 回答
1

这是一个 GNU bash POSIX 正则表达式。在 Korn Shell 中,您可以使用 extglob 正则表达式来达到同样的效果:

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

有关详细信息,请参见手册页中的“文件名模式”部分。

于 2017-01-31T18:35:32.237 回答
0

我必须使用如下所示的 ksh 表达式才能使其正常工作。

case $num in
    +([0-9])*(.)*([0-9]) )
          # Variable positive integer
      echo "positive integer"
          ;;
    *) 
          # Not a positive integer
      echo "NOPE"
      exit
          ;;
esac
于 2015-07-06T15:45:55.193 回答