腳本類的編程在我看來目的性很強(qiáng)待德,就是說,我們一般會要實現(xiàn)某個功能而選用腳本來完成睛蛛。我對腳本語言沒研究,只是在用到的時候現(xiàn)學(xué)現(xiàn)用胧谈,這樣能最快解決我的問題忆肾,不過如果要更高級的玩法,還得好好學(xué)學(xué)菱肖。
這次是在實際項目中遇到一個需求难菌,想著能否用 shell 腳本實現(xiàn),于是便開始邊查資料邊實現(xiàn)蔑滓。寫這篇文章說明我達(dá)到了我的期望,其次也是記錄一下遇绞,方便下次回顧键袱。
需求
- 獲取到電腦的 ip,并寫在一個文件里摹闽。
- ip 值形如 192.168.1.1蹄咖,文件也是有固定位置要求的。
- 因為有文件有固定位置要求付鹿,就需要用戶輸入一個根目錄(因為相對位置是一樣的澜汤,根目錄不同)蚜迅。
- 對同個設(shè)備來說,根目錄不會經(jīng)常變俊抵,所以最好用戶只輸入一次谁不,之后就不要輸入了。
- 對文件及路徑是否存在做校驗判空徽诲。
分析實現(xiàn)
我在最初的實現(xiàn)只是想嘗試需求的 1刹帕,2 點,后面是在調(diào)試過程中谎替,從用戶實際使用的角度出發(fā)做的完善偷溺。就先從 1, 2 點來說钱贯。
第一步
獲取 ip 的方式挫掏,
ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
拿到 ip 之后我希望對 ip 進(jìn)行輸出,變成一個類似這樣的配置 localIp="http://192.168.1.1/interface/prefix"秩命,
所以下一步我要做的就是形成這樣一句話尉共,
echo "192.168.1.1" > "需要用戶輸入配置的根目錄/"config.properties
這句話就能將 "192.168.1.1" 輸出到文件 config.properties 里。
總體的實現(xiàn)是這樣的硫麻,
#!/usr/bin/bash
ipValue=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
echo "http://${ipValue}/interface/prefix" > config.properties
第二步
接下去需要能讓用戶首次指定 config 文件輸出路徑爸邢,
#這可以提示用戶輸入
echo "請輸入文件路徑"
read path
如何只讓用戶配置一次 config 文件輸出路徑呢?我想肯定需要一個地方來存拿愧,并且腳本運行時先要去取杠河,取不到就提示用戶配置,
file="ip_path.txt"
if [ ! -f file ]
then
#提示用戶輸入浇辜,并且將路徑存起來
echo ${path} > file
else
path=$(cat file)
fi
好了券敌,現(xiàn)在用戶不用每次都填寫配置路徑了。
第三步
最后我對用戶輸入的 path 路徑是否存在做了校驗柳洋,如果路徑不存在將會做刪除操作待诅,確保下次還讓用戶輸入。
注意點
運行腳本時熊镣,sh 和 bash 其實是不一樣的卑雁,上述我說的其實要基于 bash,如果用 sh 就會報一些語法錯誤绪囱,這是我在調(diào)試過程中遇到的坑测蹲,究其原因,應(yīng)該就是內(nèi)在的執(zhí)行腳本不同鬼吵。
總結(jié)
網(wǎng)上關(guān)于 shell 腳本的資料還是很好找的扣甲,實現(xiàn)一些基本功能沒問題,但高深的可能就要對 linux 等相關(guān)的知識要有一定了解齿椅。
參考內(nèi)容
shell 腳本獲取 ip 地址
shell 腳本文件輸入輸出
shell 腳本 read 指令
shell 腳本 if-else 語句
shell 腳本讀取文件內(nèi)容
shell 腳本刪除文件