Shell是一个变数

时间:2012-11-07 16:10:25

标签: bash shell case wildcard

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

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

起初我试过这样:

    #!/bin/bash
    case "$1" in
        0x* ) echo hex ;;
        ''|*[!0-9]*) echo dec ;;
        * ) echo wtf ;;
    esac

后来我发现了这一点:

    if ! [[ "$yournumber" =~ ^[0-9]+$ ]] ; then
       exec >&2; echo "error: Not a number"; exit 1
    fi

嗯,没有一个有效,我求救!

2 个答案:

答案 0 :(得分: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让我使用更复杂的模式匹配来查找“hex”和“dec”数字。您可以在bash man page

中找到相关信息

答案 1 :(得分: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;