shell腳本遇到的一些坑

1,不同腳本共用同一個全局變量引發的血案

b腳本引用另一個a腳本,類似於C語言裏面的 include 引用,C衝突了還好,有靜態編譯檢查;但是 shell 腳本衝突了就甭想它給你提示,除非你目的就是要用a腳本的變量,否則腳本之間變量衝突產生的問題令人莫名其妙。這裏也引出了 sh 的編程規範,儘量不用全局變量,函數裏面變量儘量加 local 限制。

 

2,在管道里面exit 引發的血案

如果你認爲只要在 shell 腳本里面執行了 exit 就會退出腳本,那你就太天真了。進一步來講,如果你在管道里面 exit 錯誤狀態碼,然後在調用該腳本的地方,獲取腳本的執行狀態碼,那你就等着抓狂吧。原因是:管道里面exit不會退出腳本,而僅是退出管道,然後在管道的下一條語句命令繼續執行!

plus,用 while read line;do CMD done < ./t.txt  可以避免 while 管道 exit 不退出腳本的問題。

 

3,在管道里面使用全局變量的悲劇

如果你嘗試在管道里面對某個變量賦值,然後在管道外面使用這個變量,對不起,你又採坑了。、

plus,這個同樣可以用 while read line;do CMD done < ./t.txt  避免。

 

+++++++++++++++++++++++++++附加幾個基本概念+++++++++++++++++++++++++++++

1,shell狀態碼只能是 0~255 之間的整數

2,shell能處理的數據僅限於整數,如果一定要用浮點數,瞭解下bc工具

3,數值比較

4,字符串比較

要注意 > 和 < 兩個操作符都要加轉義,並且比較的依據是按ASCII字典爲依據的。這和sort按系統設置比較不同。

5,文件判斷

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