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

思路:整数的单个数字是0-9,用正则表达式可以表示为[0-9]或[:digit:],判断是否为整数也就是判断变量中字符全为0到9之间的数字。

*以下方法没有考虑01234,001234或123.00及负数等情况*


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

  2. [root@managevm1 ~]# a=123

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

  4. || echo "a is an integer"      

  5. a is an integer      

  6. [root@managevm1 ~]# a=123.4    

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

  8. || echo "a is an integer"    

  9. a isn't an integer  

  10. 也可以写为

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

  12. || echo "a is an integer"

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

  14. [root@managevm1 ~]# a=123

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

  16. else echo "a is not an integer"; fi    

  17. a is an integer    

  18. [root@managevm1 ~]# a=123.4    

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

  20. else echo "a is not an integer"; fi    

  21. a is not an integer    

  22. 这个命令也可以简单写成    

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

  24. echo "a is not an integer"  

  25. 方法三:awk过滤    

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

  27. a is an integer  

  28. 或写成    

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

  30. a is an integer

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

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

  33. [root@managevm1 ~]# a=123

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

  35. || echo "It's not an integer"  

  36. It's an integer  

  37. [root@managevm1 ~]# a=123.4  

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

  39. || echo "It's not an integer"  

  40. It's not an integer

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

  42. [root@managevm1 ~]# a=123

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

  44. echo "a is NOT an integer"

  45. A is an integer

  46. [root@managevm1 ~]# a=123.4

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

  48. echo "a is NOT an integer"

  49. a is NOT an integer

 
   
 
   


本文出自 “凯骑龟来~~” 博客,请务必保留此出处http://zzkai.blog.51cto.com/804611/776824