文件通配和仅匹配数字

时间:2011-07-13 18:31:51

标签: bash design-patterns glob

在bash脚本中,我需要验证用户是否输入了实际数字,因此我认为最简单的方法是确保实现case

case $1 in
    [0-9]*)
    echo "It's ok"
    ;;
    *)
    echo "Ain't good!"
    exit 1
    ;;
esac 

但是我很难处理文件通配,因为我找不到一种方法来要求$ 1值只能是数字。或者另一种方式可以排除所有替代方案:

case $1 in
    -*)
    echo "Can't be negative"
    exit 1
    ;;
    +*)
    echo "Must be unsigned"
    exit 1
    ;;
    *[a-zA-z]*)
    echo "Can't contain letters"
    exit 1
    ;;
esac

在这种情况下,我应该能够阻止“特殊”字样! ? ^ =()等等......我不知道如何实现它。请有人给我一个提示吗?

2 个答案:

答案 0 :(得分:5)

实际上最好使用

*[!0-9]*

而不是

*[^0-9]*

第一个是POSIX,第二个是bashism [1]。

[1] http://rgeissert.blogspot.com/2013/02/a-bashism-week-negative-matches.html

答案 1 :(得分:4)

如果在字符串中的任何地方找到非数字字符,则输入结果不好,否则很好:

case "$1" in
  *[^0-9]*) echo "first parameter must contain numbers only"; exit 1;;
esac