如何在Shell中判断一个变量是否为整数

如何在Shell中判断一个变量是否为整数,第1张

原理:一、利用expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0.如果为0,就认为加法的变量或字符串为整数,否则就不是。i=5expr $I + 6 &>/dev/nullecho $?如果输出的是0,那么表明i是整数,反之则表示为非整数。其中$?表示的是最后运行的代码的返回值上述判断中,有&>表示的就是不管是什么,都重定向到/dev/null中。二、使用sed加正则表达式思路:删除一个字符串中的所有数字,看字符串的长度是否为0,如果不为0,则不是整数。if [ -n "`echo char | sed 's/[0-9]//g'`" ] thenecho "char"elseecho "number"fi三、用变量的子串替换思路:如果num的长度不为0,并且把num中的非数字部分删除,然后看结果是不是等于num本身,如果两者成立,那么就是数字,反之亦然。if [ -n "$num" -a "$num" = "${num//[^0-9]/}" ]thenecho "char"elseecho "number"fi

C语言判断是否为整数,那么只可能是判断输入的值,或者字符串中的值,是否为整数。

因为一旦存储在变量中,根据变量类型,要么为整数,要么为浮点数,是确定的。

一、判断思路:

1、整数中,按十进制计算,合法字符为0到9,另外在最初位置可以有符号,即+或者-。

2、对于输入的值,可以先存储到字符串中,这样转换为判断字符串中是否为整数。

3、先判断第一个字符是否为+或者-, 如果是,则从第二个开始判断,否则从第一个开始判断。

4、对每一个需要判断的字符,判断是否在'0'到'9'之间,如果是则合法,否则非法。

5、一旦出现非法字符,说明不是整数。如果所有字符合法,那么是整数。

二、参考代码:

int is_int(char *s)//判断s中是否为整数,如果是返回1,否则返回0.

{

    char* p =s//p指向s。

    if(*p=='+'||*p=='-')//如果第一个字符为符号,则从第二个开始遍历。

        p++

    while(*p)//遍历字符串。

    {

        if(*p<'0'||*p>'9') return 0//出现非法字符,返回0,表示不是整数。 

        p++//判断下一个字符。

    }

    return 1//所有都是合法字符,返回1,表示为整数

}

int main()

{

    char s[200]

    gets(s)//读取输入,存到s中。

    if(is_int(s))//判断并输出结果

        printf("%s 是整数\n", s)

    else 

        printf("%s 不是整数\n",s)

    return 0

}

## 方法1

a=1234echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&echo string a is numbers

第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非空,则结果为真。

sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要的内容:即后面的表达式所匹配的行,这是通过表达式中加入“p”命令来实现的。

/^[0-9][0-9]*$/他的含义是匹配至少由一位数字构成的行

## 方法2, 可以,不过不是bash实现的,是使用了grep的正则

#if grep '^[[:digit:]]*$' <<<"$1"then

# echo "$1 is number."

#else

# echo 'no.'

#fi

## 方法3

#if [ "$1" -gt 0 ] 2>/dev/null then

# echo "$1 is number."

#else

# echo 'no.'

#fi

## 方法4,case

#case "$1" in

# [1-9][0-9]*)

#echo "$1 is number."

#

# *)

#

#esac

## 方法5,awk

#echo $1| awk '{print($0~/^[-]?([0-9])+[.]?([0-9])+$/)?"number":"string"}'

## 方法5,awk

#if [ -n "$(echo $1| sed -n "/^[0-9]\+$/p")" ]then

# echo "$1 is number."

#else

# echo 'no.'

#fi

## 方法6,expr

expr $1 "+" 10 &>/dev/null

if [ $? -eq 0 ]then

echo "$1 is number"

else

echo "$1 not number"

fi


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8530997.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存