bash shell數值比較(-eq)與字符比較(==)的區別
為什麽會有此文章,正是因為筆者在線上使用腳本運維的過程中,因此bug出現過兩次失手,也給公司帶來了帶來了一些損失,經過仔細分析程序日誌和腳本運行邏輯,加上如下測試過程,才真正找到了bug的所在以及解決辦法。以下是筆者推敲思路,供大家分析之用。
[root@lovefirewall ~]# echo $tables
[root@lovefirewall ~]# echo $switch
[root@lovefirewall ~]# [[ $tables -eq 0 ]] && switch=off || switch=on
[root@lovefirewall ~]# echo $switch
off
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $switch
[root@lovefirewall ~]# [[ $tables == ^$ ]] && switch=off || switch=on
on
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $switch
[root@lovefirewall ~]# [[ $tables == [[:space:]] ]] && switch=off || switch=on
[root@lovefirewall ~]# echo $switch
on
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $switch
[root@lovefirewall ~]# [[ $tables == "" ]] && switch=off || switch=on
[root@lovefirewall ~]# echo $switch
off
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $switch
[root@lovefirewall ~]# [[ 0 == "" ]] && switch=off || switch=on
[root@lovefirewall ~]# echo $switch
on
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $tables
[root@lovefirewall ~]# echo $switch
[root@lovefirewall ~]# [[ $tables == 0 ]] && switch=off || switch=on
[root@lovefirewall ~]# echo $switch
on
[root@lovefirewall ~]#
bash shell只能做整數比較,浮點數無法使用數值比較,但好在可以使用字符比較進行彌補,字符的比較是沒有誤差的
[root@lovefirewall ~]# [[ 11.11 -eq 11.22 ]] && echo wrong || echo right
-bash: [[: 11.11: syntax error: invalid arithmetic operator (error token is ".11")
right
[root@lovefirewall ~]# [[ 11.11 == 11.22 ]] && echo wrong || echo right
right
[root@lovefirewall ~]# [[ 11.11 == 11.12 ]] && echo wrong || echo right
right
[root@lovefirewall ~]# [[ 10.10 == 10.01 ]] && echo wrong || echo right
right
[root@lovefirewall ~]#
仔細閱讀本文內容並按上述代碼親自測試一輪的朋友,相信你對bash shell弱類型又有了更進一步的認識了吧!理解了什麽是弱類型語言特性,以及bash shell數值比較與字符比較的區別。
bash shell數值比較(-eq)與字符比較(==)的區別