Shell 腳本-實現(xiàn)獲取網絡 ip 并輸出文件的小功能

腳本類的編程在我看來目的性很強,就是說,我們一般會要實現(xiàn)某個功能而選用腳本來完成。我對腳本語言沒研究,只是在用到的時候現(xiàn)學現(xiàn)用,這樣能最快解決我的問題,不過如果要更高級的玩法,還得好好學學。

這次是在實際項目中遇到一個需求,想著能否用 shell 腳本實現(xiàn),于是便開始邊查資料邊實現(xiàn)。寫這篇文章說明我達到了我的期望,其次也是記錄一下,方便下次回顧。

需求

  1. 獲取到電腦的 ip,并寫在一個文件里。
  2. ip 值形如 192.168.1.1,文件也是有固定位置要求的。
  3. 因為有文件有固定位置要求,就需要用戶輸入一個根目錄(因為相對位置是一樣的,根目錄不同)。
  4. 對同個設備來說,根目錄不會經常變,所以最好用戶只輸入一次,之后就不要輸入了。
  5. 對文件及路徑是否存在做校驗判空。

分析實現(xiàn)

我在最初的實現(xiàn)只是想嘗試需求的 1,2 點,后面是在調試過程中,從用戶實際使用的角度出發(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 進行輸出,變成一個類似這樣的配置 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 就會報一些語法錯誤,這是我在調試過程中遇到的坑,究其原因,應該就是內在的執(zhí)行腳本不同。

總結

網上關于 shell 腳本的資料還是很好找的,實現(xiàn)一些基本功能沒問題,但高深的可能就要對 linux 等相關的知識要有一定了解。

參考內容

shell 腳本獲取 ip 地址
shell 腳本文件輸入輸出
shell 腳本 read 指令
shell 腳本 if-else 語句
shell 腳本讀取文件內容
shell 腳本刪除文件

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容