編輯人:AK
引用(張星宇發(fā)布的 “2018 年將至,iOS 工程師如何自我提高” )腳本語言非常重要,絕對是提升工作效率的神器,我強(qiáng)烈建議每個客戶端工程師都應(yīng)該了解一些 Shell 腳本并且掌握 Python,Ruby 和 JS 中至少一門語言。
理論上來說沒有什么是腳本語言做得到,Java 做不到的,但腳本語言最大的特點就是快,快到極點的那種快。對于一些極度簡單的小需求,比如統(tǒng)計一個文件中某一列數(shù)字的平均數(shù),我敢保證在我得出結(jié)果之前你肯定還來不及打開 Java 編輯器。
腳本語言的另一個特點是高度的自動化,只要 Unix 和 Linux 系統(tǒng)一天不死,shell 腳本就會永遠(yuǎn)存活,你學(xué)習(xí)的知識就永遠(yuǎn)不會過期,比如 awk 和 sed 這樣的神器,年齡比我大得多,至今還非常實用,未來的 20 年也絲毫看不出淘汰的跡象。試問一下,有什么知識能比一個幾十年不會過期,而且每天都能用上的知識更值得學(xué)習(xí)呢?由于 Shell 是距離操作系統(tǒng)最近的腳本,了解了它以后,很多復(fù)雜的操作都可以被自動化。比如想找到項目中無用的圖片,也就是一行命令的事
變量 | 說明 |
---|---|
$0 | 當(dāng)前記錄(這個變量中存放著整個行的內(nèi)容) |
1 1~1 n | 當(dāng)前記錄的第n個字段,字段間由FS分隔 |
FS | 輸入字段分隔符 默認(rèn)是空格或Tab |
NF | 當(dāng)前記錄中的字段個數(shù),就是有多少列 |
NR | 已經(jīng)讀出的記錄數(shù),就是行號,從1開始,如果有多個文件話,這個值也是不斷累加中。 |
FNR | 當(dāng)前記錄數(shù),與NR不同的是,這個值會是各個文件自己的行號 |
RS | 輸入的記錄分隔符, 默認(rèn)為換行符 |
OFS | 輸出字段分隔符, 默認(rèn)也是空格 |
ORS | 輸出的記錄分隔符,默認(rèn)為換行符 |
FILENAME | 當(dāng)前輸入文件的名字 |
我都是以 nestat.txt 為例子
Proto Recv-Q Send-Q Local Address Foreign Address (state)tcp4 0 0 192.168.16.130.55429 ec2-52-193-9-121.https ESTABLISHEDtcp4 0 0 192.168.16.130.55426 42.120.17.16.https ESTABLISHEDtcp6 0 0 im-aks-brother-2.55421 iphonex.49596 ESTABLISHEDtcp6 0 0 im-aks-brother-2.55414 iphonex.49578 ESTABLISHEDtcp6 0 0 im-aks-brother-2.55410 iphonex.49568 ESTABLISHEDtcp4 0 0 192.168.16.130.55401 ec2-34-203-25-67.https ESTABLISHEDtcp4 0 0 192.168.16.130.55399 153.35.132.52.http ESTABLISHEDtcp6 0 0 im-aks-brother-2.55361 fe80::10c0:5b06:.63596 ESTABLISHEDtcp6 0 0 im-aks-brother-2.55359 fe80::10c0:5b06:.63591 FIN_WAIT_2tcp6 0 0 im-aks-brother-2.55354 fe80::10c0:5b06:.63584 ESTABLISHED
awk '{print $1}' netstat.txt
awk 'gsub(/ESTABLISHED/,"聽"); print "\n",$1,$2,$3,$4,$5,$6} ' netstat.txt
awk '$6=="FIN_WAIT_2"' netstat.txt
ps |grep iTerm2 | grep -v grep| awk '{print $1}' | xargs kill -9
lsof -nP -iTCP:8181 |grep LISTEN|awk '{print $2}'|kill -9
有一些記不住的地方可以去 google 查找,最主要的其實是什么時候,什么問題使用 awk 這才是要鍛煉的思維方式.