浅析嵌入式开发中编写linux脚本的”瑞士军刀“

在嵌入式linux开发过程中,当开发板启动过程时,首先需要运行一些shell脚本来进行系统配置。我们知道linux一切皆文件,如果对配置文件或log打印信息的获取需要写个程序去读取,必然大大降低了开发效率。本文浅析非常高效的linux shell命令awk在开发工程中的实际应用。

1,从系统命令的打印中获取有用信息。

演示:

上图为开发板网络信息,现在从中获取到ip,netmask

因此,在shell脚本中获取到ip和mask地址,只需下面两行。

ip=$( ifconfig eth0 | grep 'inet addr' | awk -F: '{print $2}' | awk '{print $1}' )
mask=$( ifconfig eth0 | grep 'Mask' | awk -F: '{print $4}' )

分析

1,命令ifconfig eth0可以获取到网卡eth0对应的网络信息;

       

2,再讲以上打印通过管道 ' | ' 交给 grep 'inet addr'来处理;

      

3,通过grep查找到包含“inet addr”的行打印出来,再通过管道交给awk -F: '{print $2}'来处理;

这里的awk -F:的意思是将输入的信息用':'进行分隔,awk缺省参数默认是空格或tab进行分隔的。

'{print $2}'表示打印出以:分隔后的第二个字段,即192.168.1.101 Bcast。

$0表示获取整行,$2,$3...表示获取第2,3个字段信息。

4,然后将以上打印再进行一次 awk '{print $1}',即可获取到192.168.101。

其中,grep是非常高效的查找命令,可以在liux终端 grep看下用法。

awk是非常强大的文本分析工具。可以在linux终端输入awk查看用法

2,从文本中获取到某行指定位置的信息。

演示:

这里以classInfo.ini文件举例。

要从文件中获取到wangwu的值复制给shell中的变量进行系统配置。

只需要在shell脚本中使用

readIni=`awk -F '=' '/\['class2'\]/{a=1}a==1&&$1~/'wangwu'/{print $2;exit}' ./classInfo.ini`

1,其中/\['class2'\]/{a=1},意思为awk一行行处理classInfo.ini文件过程中,当匹配到'[class2]'时,设a=1;

2,a==1&&$1~/'wangwu'/ {print $2;exit}意思为当a==1,并且接下来获取到的行包含/'wangwu'/,即(wangwu=300)根据前面-F '=' 分隔后,打印print $2,即第二个字段信息($1为wangwu,$2为300)。

在shell脚本中一般将以上命令封装成一个函数来调用,即:

function __readINI() {
      INIFILE=$1;    SECTION=$2;    ITEM=$3
      _readIni=`awk -F '=' '/\['$SECTION'\]/{a=1}a==1&&$1~/'$ITEM'/{print $2;exit}' $INIFILE`
      echo ${_readIni}
}

调用时直接使用:

value=$( __readINI ./classInfo.ini class2 wangwu)

猜你喜欢

转载自blog.csdn.net/yufeng1108/article/details/105847713