shell实现配置文件解析

需求:解析一个特定格式的文件(这个文件可以成为一个配置文件),逐行读取,并打印出来。

 

方案:while实现读取,然后用awk进行读取相应的值。

 

第一步:用while读取文件。

 

while read file

do

done < config.txt

 

这里file是一个变量,代表读的那一行,shell是弱数据类型语言,所以file这个变量是字符串变量。

 

第二步:获取file变量中的值。(以空格为分割线进行处理)

 

   a=`echo $file |awk '{print $0}'`

   b=`echo $file |awk '{print $1}'`

   c=`echo $file |awk '{print $2}'`

   d=`echo $file |awk '{print $3}'`

   e=`echo $file |awk '{print $4}'`

 

   echo '++++++++++++++++++++++++++++'

   echo a=$a

   echo b=$b

   echo c=$c

   echo d=$d

   echo e=$e 

   echo '++++++++++++++++++++++++++++'

这样我们就可以得到相应的变量值了。如:

<project ext="xiyouji" name="sunwukong" path="huaguoshan" />

 

打印结果为:

++++++++++++++++++++++++++++

a=<project ext="xiyouji" name="sunwukong" path="huaguoshan" />

b=<project

c=ext="xiyouji"

d=name="sunwukong"

e=path="huaguoshan"

f=/>

++++++++++++++++++++++++++++

 

可以看到,$0 代表了全部,12345分别对应了空格分开的字段

 

第三步:获取上面变量中的值

echo '============================='

ext=`echo $c |awk -F '"' '{print $2}'`

name=`echo $d |awk -F '"' '{print $2}'`

path=`echo $e |awk -F '"' '{print $2}'`

 

echo ext is:$ext

echo name is:$name

echo path is:$path

echo '============================='

 

打印结果为:

=============================

ext is:xiyouji

name is:sunwukong

path is:huaguoshan

=============================

原理同上

 

第四步:awk的详细解释。

https://www.cnblogs.com/xudong-bupt/p/3721210.html

总结:

awk中如果没有用-F指定特定的分割符号,默认是用空格进行分割,读者可以自行尝试修改config.txt的内容,用不同的分割符进行练习

完整代码:

#!/bin/bash

while read file

do

a=`echo $file |awk '{print $0}'`

   b=`echo $file |awk '{print $1}'`

   c=`echo $file |awk '{print $2}'`

   d=`echo $file |awk '{print $3}'`

   e=`echo $file |awk '{print $4}'`

 

   echo '++++++++++++++++++++++++++++'

   echo a=$a

   echo b=$b

   echo c=$c

   echo d=$d

   echo e=$e 

   echo '++++++++++++++++++++++++++++'

 

   ext=`echo $c |awk -F '"' '{print $2}'`

   name=`echo $d |awk -F '"' '{print $2}'`

   path=`echo $e |awk -F '"' '{print $2}'`

 

   echo '============================='

   echo ext is:$ext

   echo name is:$name

   echo path is:$path

   echo '============================='

done < config.txt

 

config.txt的内容为:

<project ext="xiyouji" name="sunwukong" path="huaguoshan" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值