set -e 設定該選項後,當指令碼中任何以乙個命令執行返回的狀態碼不為0時就退出整個指令碼(預設指令碼執行中某行報錯會繼續往下執行),這樣就不必設定很多的判斷條件去判斷每個命令是否執行成功,特別那些依賴很強的地方,指令碼任何一處執行報錯就不應繼續執行其他語句的時候就特別有用,之前寫的一些像lamp的安裝指令碼就深有體會。。。
簡單的寫個指令碼測試下,在不使用set -e 的時候執行如下指令碼:
執行結果,可以看到報錯後繼續執行,輸出了 end
在指令碼中加入set -e 後,執行結果:
set -u 設定該選項後,當指令碼在執行過程中嘗試使用未定義過的變數時,報錯並退出執行整個指令碼(缺省會把該變數的值當作空來處理),這個感覺也非常有用,有些時候可能在指令碼中變數很多很長,疏忽了把某個變數的名字寫錯了,這時候執行指令碼不會報任何錯誤,但結果卻不是你想要的,排查起來很是頭疼,使用這個選項就完美的解決了這個問題。
同樣來簡單測試下:
在不加set -u 時,執行不會有任何問題,會把$good變數當作空值來處理:
當加上set -u時的執行結果:
bash指令碼使用技巧 md
目錄指定換行符讀取 bin bash ifs for line in cat etc passwd do echo line done檔案重定向給read處理 bin bash cat etc passwd while read line do echo line done用read讀取檔案重定向 ...
shell指令碼小技巧
有個需求是,每隔4個小時會跑一遍資料收集的爬蟲,因為這個爬蟲指令碼寫的很爛,所以有時候進入死迴圈後,程序就永遠不遠停掉,因此需要寫個定時任務,定時清理這些無用程序。首先在shell上學習如何清理指定程序 ps ef grep v grep grep x cut c 10 14 xargs kill ...
sell指令碼小技巧
1.統計檔案個數 ls a wc w 注意 wc file1 file2 輸出各個檔案的行數 字數 位元組數也可以用 l w c指定單獨輸出行數 字數和位元組數。2.合併兩個檔案內容到file3 cat file1 file2 file3 3.從鍵盤輸入內容到file cat file 4.重定向 ...