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,文件判斷