Shell環境下如何判斷一個變量是否爲整數呢?
這個問題看似簡單確也有很多種方法。
思路:整數的單個數字是0-9,用正則表達式可以表示爲[0-9]或[:digit:],判斷是否爲整數也就是判斷變量中字符全爲0到9之間的數字。
*以下方法沒有考慮01234,001234或123.00及負數等情況*
- 方法一:使用字符串過濾出非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