bash shell數值比較(-eq)與字符比較(==)的區別

運維中常常編寫腳本時,若是遇到使用變量間歇取值並和整數進行比較時,大多數人第一時間會想到使用"-eq"進行比較,但事實中若是因特殊緣由致使變量取值爲空(null)時,bash shell會把null轉換爲0進行"-eq"比較,若是遇到此種困惑,能夠把整數比較方法改成使用字符串比較(==),這樣就能夠很好的解決整數比較帶來的這種bug。


爲何會有此文章,正是由於筆者在線上使用腳本運維的過程當中,所以bug出現過兩次失手,也給公司帶來了帶來了一些損失,通過仔細分析程序日誌和腳本運行邏輯,加上以下測試過程,才真正找到了bug的所在以及解決辦法。如下是筆者推敲思路,供你們分析之用。



[root@lovefirewall ~]# echo $tablesshell

[root@lovefirewall ~]# echo $switchbash

[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
[root@lovefirewall ~]# echo $switch
on
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $switchide

[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 $switchspa

[root@lovefirewall ~]# [[ 0 == "" ]] && switch=off || switch=on
[root@lovefirewall ~]# echo $switch
on
[root@lovefirewall ~]# unset switch
[root@lovefirewall ~]# echo $tables日誌

[root@lovefirewall ~]# echo $switchtoken

[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 ~]# it



仔細閱讀本文內容並按上述代碼親自測試一輪的朋友,相信你對bash shell弱類型又有了更進一步的認識了吧!理解了什麼是弱類型語言特性,以及bash shell數值比較與字符比較的區別。

相關文章
相關標籤/搜索