如何检查字符串是否只包含数字/数字字符

时间:2015-08-19 23:05:51

标签: bash

如何检查MyVar是否包含带有BASH if语句的位数。数字我指的是0-9。

即:

if [[ $MyVar does contain digits ]]  <-- How can I check if MyVar is just contains numbers
then
 do some maths with $MyVar
else
 do a different thing
fi

5 个答案:

答案 0 :(得分:14)

这是:

#!/bin/bash
if [[ $1 =~ ^[0-9]+$ ]]
then
    echo "ok"
else
    echo "no"
fi

如果第一个参数仅包含数字,则打印ok,否则输出no。你可以用./yourFileName.sh inputValue

来调用它

答案 1 :(得分:8)

[[ $myvar =~ [^[:digit:]] ]] || echo All Digits

或者,如果你喜欢if-then表格:

if [[ $myvar =~ [^[:digit:]] ]]
then
    echo Has some nondigits
else
    echo all digits
fi

在过去,我们会使用[0-9]。这种形式不是unicode安全的。现代的unicode-safe替换是[:digit:]

答案 2 :(得分:4)

如果您想以符合POSIX的方式进行测试,可以使用以下任一方式:

expr string : regex        ## returns length of string if both sides match

expr match string regex    ## behaves the same

例如,测试$myvar是否全是数字:

[ $(expr "x$myvar" : "x[0-9]*$") -gt 0 ] && echo "all digits"

注意: 'x'前置于变量和表达式,以防止测试空字符串抛出错误。要使用测试返回的length,请不要忘记减去代表1的{​​{1}}。

'x'形式中,这是一个简短的脚本,用于测试脚本的第一个参数是否包含所有数字:

if-then-else

示例输出

#!/bin/sh

len=$(expr "x$1" : "x[0-9]*$")  ## test returns length if $1 all digits
let len=len-1                   ## subtract 1 to compensate for 'x'

if [ $len -gt 0 ]; then         ## test if $len -gt 0 - if so, all digits
    printf "\n '%s' : all digits, length: %d chars\n" "$1" $len
else
    printf "\n '%s' : containes characters other than [0-9]\n" "$1"
fi

bash正则表达式测试$ sh testdigits.sh 265891 '265891' : all digits, length: 6 chars $ sh testdigits.sh 265891t '265891t' : contains characters other than [0-9] 很好,我使用它,但它是 bashism (仅限于bash shell)。如果您关注可移植性,POSIX测试将适用于任何符合POSIX标准的shell。

答案 3 :(得分:1)

简单!只需在grep中使用表达式选项 下面的解决方案回显该变量,并检查它是否仅包含数字

if [[ $(echo $var | grep -E "^[[:digit:]]{1,}$") ]]
then
    echo "var contains only digits"
else
    echo "var contains other characters apart from digits"
fi

答案 4 :(得分:0)

不含[[]]的Grep表达式解决方案,可实现更广泛的外壳兼容性:

if [ "$(echo $var | grep -E "^[0-9]{1,}$")" ]; then echo "digits only"; then
    echo "var contains digits only"
else
    echo "var contains digits and/or other characters"
fi