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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章