6條shell小技巧,讓腳本顯得再也不業餘【轉】

如何能讓本身的shell顯得不那麼業餘?下面6點實踐必定有用。程序員

畫外音:本篇文章源自Google的一篇實踐,抽取了部分1分鐘能讀完的內容,加入了一些分析。正則表達式

 

1、如下面的語句開場shell

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

set -o nounsetexpress

在默認狀況下,遇到不存在的變量,會忽略並繼續執行,而這每每不符合預期,加入該選項,能夠避免惡果擴大,終止腳本的執行。安全

畫外音:有些變量名的手誤,會讓人崩潰的調試半天,經過這個方式,這類手誤秒發現。bash

 

set -o errexit函數

在默認狀況下,遇到執行出錯,會跳過並繼續執行,而這每每不符合預期,加入該選項,能夠避免惡果擴大,終止腳本的執行。字體

畫外音:有些Linux命令,例如rm的-f參數能夠強制忽略錯誤,此時腳本便沒法捕捉到errexit,這樣的參數在腳本里是不推薦使用的。編碼

 

這兩個選項,都符合fail fast設計理念。設計

 

2、封裝函數有必要

別光顧着一溜往下寫,封裝能夠提升複用。

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

如上例:

log()

簡單封裝,可以省去不少

[$(date +%Y/%m/%d\ %H:%M:%S)]

的重複代碼。

畫外音:這個log()有點意思,學到了嗎?

 

同時,封裝還能提升代碼的可讀性。

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

如上例:

ExtractBashComments

egrep "^#"

的可讀性就高不少。

畫外音:有些擡槓的朋友會說,不認識英文。

 

3、使用readonly和local修飾變量

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

readonly

顧名思義,只讀。

 

local

函數內變量。

 

別圖省事,提升安全性的同時,能避免不少讓人崩潰的莫名其妙的錯誤。腳本寫得專不專業,每每不是什麼高深的點,從基本功絕逼能體現。

畫外音:聽說,一個C++程序員到什麼水平,從ta代碼裏const的使用頻度,可以看出來。

 

4、使用$()代替`(反單引號)

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

爲何?看了上面的例子你就懂了:

(1)$()可以支持內嵌;

(2)$()不用轉義;

(3)有些字體,`(反單引號)和’(單引號)很像,容易把人搞暈;

 

5、使用[[]]代替[]

用單中括號:

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

用雙中括號:

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

 

看出差異了麼?[[]]更符合人性編碼:

(1)避免轉義問題;

(2)有很多新功能;

 

新功能包含但不限於:

|| :邏輯or

&& :邏輯and

< :字符串比較(不須要轉義)

== :通配符(globbing)字符串比較

=~ :正則表達式(regular expression, RegEx)字符串比較

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

須要注意的是,從bash3.2開始,通配符和正則表達式都不能用引號包裹了(因此,上面的例子,加了引號就是字面比較)。

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

因此若是表達式裏有空格,必須存儲到一個變量裏,再進行通配符與正則的比較。

 

6、echo不是惟一的調試方法

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

能夠用-n對腳本進行語法檢查。

 

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

能夠用-v跟蹤腳本里的每一個命令的執行。

 

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列)

能夠用-x跟蹤腳本里的每一個命令的執行,並附加擴充信息。

 

固然,也能夠在腳本里,添加

set -o verbose

set -o xtrace

來永久指定輸出調試信息。

轉自

6條shell小技巧,讓腳本顯得再也不業餘(1分鐘系列) https://www.toutiao.com/i6731506941442392590/

相關文章
相關標籤/搜索