首页 > 系统 > Linux > 正文

Shell脚本读取ini配置文件的实现代码2例

2019-10-26 18:41:37
字体:
来源:转载
供稿:网友

一、简单版

参考stackoverflow的例子,改了一个出来:

代码如下:
while IFS='= ' read var val
do
    if [[ $var == /[*] ]]
    then
        section=$(echo $var | sed 's/^/[/(.*/)/]$//1/')
    elif [[ $val ]]
    then
        if [ -z $section ];then
            declare "${var}=$val"
        else
            declare "${section}.${var}=$val"
        fi 
    fi 
done < config.ini

使用的时候:
代码如下:
${section.key}

就可以读到变量啦。

二、复杂版

代码如下:
[comon]
ids=com1,com2,com3
files=profilefile
 
 
[com1]
key="name"
file="test"
 
[com2]
key="name1"
file="test"
 
[com3]
key="name2"
file="test"

取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):
代码如下:awk -F '=' '//[com1/]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini
这样就简单取到值了。
查了下命令终于明白,命令分为两个部分:
先模式匹配到:[com1]然后执行动作:a=1,再接着有来个模式+命令
模式:“a==1&&$1~/key/”
a==1因为已经赋值了,所以执行下一步,如果$1第一个字段匹配key的值,则
打印第2项,紧接着退出,退出就不会打印到匹配[com2]和[com3]的key值.
 
需求会变得,现在变成取【com】几个key对应的值,提供的shell的脚本如下:
代码如下:
#!/bin/sh
getconfig()
{
  SECTION=$1
  CONFILE=$2
  ENDPRINT="key/tfile/t"
  echo "$ENDPRINT"
  for loop in `echo $ENDPRINT|tr '/t' ' '`
  do
       #这里面的的SECTION的变量需要先用双引号,再用单引号,我想可以这样理解,
       #单引号标示是awk里面的常量,因为$为正则表达式的特殊字符,双引号,标示取变量的值
       #{gsub(/[[:blank:]]*/,"",$2)去除值两边的空格内容
       awk -F '=' '//['"$SECTION"'/]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s/t",$2) ;exit}' $CONFILE
  done
}
 
#更改变量名称
CONFIGFILE=$1
echo "========================================================"
#文件名称
echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表