程序环境: 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_Ip
echo $Str
if [ "$1" = "hello" ]; then
echo '~~~~~~~~~'
fi
转行嵌入式的基本素养: