通过Shell脚本读取properties文件中的参数

问题具体描述

  • 目标:读取 *.properties文件,获取里面的键值对。
  • 遇到的问题:通过 shell 脚本读取 *.properties 文件时,由于其 key-value 格式分行存储,在 linux 中获取到的 value 值最后有一个 \r 参数(可以通过 sh -x app.sh 查看到),导致得到的值跟预期的不一致。

简单键值对

  • 定义键值对 pom.properties 如下:

    1
    2
    3
    version=1.0
    groupId=project.parent
    artifactId=com.lxk.cms.admin.service

原始版本

  • 这样写在控制台打印出来看着是很正常的,因为 \r 已被 echo 所处理,所以看不出什么,但输出到文本中每个值后边都会跟上 
 这样一个乱码。

    1
    2
    3
    4
    5
    . pom.properties
    ver=$version
    art=$artifactId
    echo $ver
    echo $art

优化版本

  • 去除后边的 \r 后一切正常。

    1
    2
    3
    . pom.properties
    ver=$(echo $version | sed 's/\r//')
    art=$(echo $artifactId | sed 's/\r//')

复杂键值对

很多时候我们定义key的时候会想下面一样进行分组,此时使用上面的所使用的.进行加载键值对shell就会报错,那么我们可以使用 grep 命令进行解决:

  • 定义键值对pom.properties如下:

    1
    2
    3
    redis.ip=127.0.0.1
    redis.port=6379
    redis.db=8
  • 写成一个函数,将所需的key传入即可,最后也须将 \r 去除

    1
    2
    3
    prop(){
    grep "${1}" pom.properties | cut -d'=' -f2 | sed 's/\r//'
    }

参考链接

setzero wechat
Powered By Valine
v1.5.2