2

晚上好,我想写一个脚本来说明它的参数是否是一个数字,但是我明白了:

a: 4: Syntax error: "(" unexpected (expecting ")")

起初我是这样尝试的:

    #!/bin/bash
    案例“$1”在
        0x* ) 十六进制回显;;
        ''|*[!0-9]*) echo dec ;;
        * ) 回声 wtf ;;
    经社理事会

后来我发现了这一点:

    如果 ![[ "$yournumber" =~ ^[0-9]+$ ]] ; 然后
       执行 >&2; echo "错误:不是数字"; 1号出口
    菲

好吧,它们都不起作用,我寻求帮助!

4

2 回答 2

2

我不确定你的意思是什么*[!0-9]*,但以下似乎对我有用。

#!/bin/bash

shopt -s extglob

case "$1" in
    '')
        echo missing ;;
    0x+([0-9a-fA-F]))
        echo hex ;;
    +([0-9]))
        echo dec ;;
    *)
        echo wtf ;;
esac

请注意,extglob让我使用更复杂的模式匹配来查找“十六进制”和“十进制”数字。您可以在bash 手册页中找到这方面的信息。

于 2012-11-07T16:16:59.160 回答
0

这个作为基础怎么样?

expr >>/dev/null "$i" : '0[xX][0-9a-fA-f][0-9a-fA-F]$' && echo hex; expr >>/dev/null "$i" : '0[0-7]$' && echo oct; expr >>/dev/null "$i" : '[0-9][0-9]*$' && echo dec;

于 2017-12-06T22:17:54.693 回答