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

方法一:使用字符串过滤出非0到9之间的字符。

[root@managevm1 ~]# a=123

[root@managevm1 ~]# echo $a | grep "[^0-9]" && echo "a isn't an integer" \

|| echo "a is an integer"

a is an integer

[root@managevm1 ~]# a=123.4

[root@managevm1 ~]# echo $a | grep "[^0-9]" && echo "a isn't an integer" \

|| echo "a is an integer"

a isn't an integer

也可以写为

[root@managevm1 ~]# echo $a | grep -v "[0-9]*" && echo "a isn't an integer"\

|| echo "a is an integer"

方法二:使用条件判断,$a中0到9出现一次以上,且不包含其他字符。

[root@managevm1 ~]# a=123

[root@managevm1 ~]# if [[ $a=~ ^[0-9]\{1,\}$ ]]; then echo "a is an integer;"\

else echo "a is not an integer"; fi

a is an integer

[root@managevm1 ~]# a=123.4

[root@managevm1 ~]# if [[ $a=~ ^[0-9]\{1,\}$ ]]; then echo "a is an integer;"\

else echo "a is not an integer"; fi

a is not an integer

这个命令也可以简单写成

[root@managevm1 ~]# [[ $a=~ ^[0-9]*$ ]] && echo "a is an integer" || \

echo "a is not an integer"

方法三:awk过滤

[root@managevm1 ~]# echo $a|awk '/^[0-9]*$/{print "a is an integer"}'

a is an integer

或写成

[root@managevm1 ~]# echo $a|awk '{if ($1~/^[0-9]*$/) print "a is an integer"}'

a is an integer

方法四:使用命令bc来计算,因为shell不支持浮点预算,非整数a的值除1后会得到整数部分与原值不符合

注意这里使用 == 是做字符串的比较非数值比较。数值比较用 -eq , 不支持浮点。

[root@managevm1 ~]# a=123

[root@managevm1 ~]# [ $(echo $a/1|bc) == "$a" ] && echo "It's an integer" \

|| echo "It's not an integer"

It's an integer

[root@managevm1 ~]# a=123.4

[root@managevm1 ~]# [ $(echo $a/1|bc) == "$a" ] && echo "It's an integer" \

|| echo "It's not an integer"

It's not an integer

方法五:利用test下不支持浮点数比较的特性,通过命令的返回状态来判断。

[root@managevm1 ~]# a=123

[root@managevm1 ~]# [ $a -ge 0 ] 2>/dev/null && echo "A is an integer"|| \

echo "a is NOT an integer"

A is an integer

[root@managevm1 ~]# a=123.4

[root@managevm1 ~]# [ $a -ge 0 ] 2>/dev/null && echo "A is an integer"|| \

echo "a is NOT an integer"

a is NOT an integer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值