今天一朋友問我一個bash腳本在開頭出現了set -u 和 set -e 兩行是什么作用,我也納悶沒見過這樣的寫法啊於是百度了一下,才發現原來這兩個bash的選項這么有用,這邊記錄下方便以后查閱。
set -e 設置該選項后,當腳本中任何以一個命令執行返回的狀態碼不為0時就退出整個腳本(默認腳本運行中某行報錯會繼續往下執行),這樣就不必設置很多的判斷條件去判斷每個命令是否執行成功,特別那些依賴很強的地方,腳本任何一處執行報錯就不應繼續執行其他語句的時候就特別有用,之前寫的一些像LAMP的安裝腳本就深有體會。。。
簡單的寫個腳本測試下,在不使用set -e 的時候執行如下腳本:
11
執行結果,可以看到報錯后繼續運行,輸出了 End
12
在腳本中加入set -e 后,執行結果:
13
set -u 設置該選項后,當腳本在執行過程中嘗試使用未定義過的變量時,報錯並退出運行整個腳本(默認會把該變量的值當作空來處理),這個感覺也非常有用,有些時候可能在腳本中變量很多很長,疏忽了把某個變量的名字寫錯了,這時候運行腳本不會報任何錯誤,但結果卻不是你想要的,排查起來很是頭疼,使用這個選項就完美的解決了這個問題。
同樣來簡單測試下:
1
在不加set -u 時,執行不會有任何問題,會把$GOOD變量當作空值來處理:
2
當加上set -u時的運行結果:
3
還有其他一些可以設置的bash選項,個人感覺作用不是很大,就不再一一介紹,有興趣的可以百度。