程式環境: ubuntu16。04 x64 虛擬機器
以一個實際的需求為例進行說明: 獲取固定網絡卡的ip地址
一、 例子拆解
1. ifconfig效果
ifconfig ens33
2. 使用awk格式化字元
ifconfig ens33 | awk ‘/inet/ {print $2}’
① |
管道命令運算子 | 可以用來連線程序,管道符左邊命令可以作為管道符右邊命令的輸入。
② 介紹下awk指令:
awk是一個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。
一種使用方法:
awk ‘{pattern + action}’ {filenames}
pattern 表示 AWK 在資料中查詢的內容
而 action 是在找到匹配內容時所執行的一系列命令
pattern就是要表示的正則表示式,用斜槓括起來
awk語言的最基本功能是在檔案或者字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他文字操作。完整的awk指令碼通常用來格式化文字檔案中的資訊
說回例子中引數的意義,
/inet/ 正則表示式
{print $2} 對第二列結果進行輸出;以上面ifconfig ens33輸出為例,按照空格來劃分域,找到inet所在行並輸出第二個域
3 使用cut獲取最終需要資訊
ifconfig ens33 | awk ‘/inet/ {print $2}’| cut -f2 -d “:”
cut
正如其名,cut的工作就是“剪”,具體的說就是在檔案中負責剪下資料用的。
-f 與-d一起使用,指定顯示哪個區域
二、 其他怪怪的關鍵字
整數比較:
-eq(equal) 相等
-ne(inequality) 不相等
-gt(greater than) 大於
-lt(less than) 小於
-ge(greater equal) 大於或等於
-le(less equal) 小於或等於
三、 指令碼程式的引數傳遞
將上面的命令寫入指令碼檔案中,並傳入引數:
#! /bin/bash 嵌入式則指定sh直譯器
Src_Ip=$(/sbin/ifconfig ens33 | awk ‘/inet/ {print $2}’ | cut -f2 -d “:”) Str=$1
echo $Src_Ipecho $Str
if [ “$1” = “hello” ]; then echo ‘~~~~~~~~~’fi
轉行嵌入式的基本素養:
每日雞湯: 是夢想支撐了生活