shell 解析properties_linux/shell:读取包含'.'键名的.properties文件

如果properties中的key名只是由字母数字组成,那读取properties中的property很简单,示例如下:

假设.properties中内容为:

prop1.properties

username=tom

读取prop1.properties中的username

. prop1.properties

echo $username

但是如果key的名字包含了.(比如redis.port),这个办法就不能用了,因为linux shell中不允许变量名有.符号。

网上找到这篇文章 《linux – 如何读取包含使用Shell脚本具有句点字符的键的.properties文件

》,提供了另一种解决办法,就是以文本方式读取properties文件,解析每一行=号两边的内容,将key中的.替换为_.但是这篇文章提供的脚本有一个漏洞:就是没有处理注释符号#.所以容易会带来逻辑隐患。所以在这篇文章提供的脚本的基础我改进了一下,对于以#起始的行不处理。

实现代码如下:

#!/bin/bash

config="$HOME/your.properties"

if [ -f "$config" ]

then

echo "$config found."

while IFS='=' read -r key value

do

## '.'替换为'-'

key=$(echo $key | tr '.' '_')

## 不处理注释符#起始的key

[[ -z $(echo "$key" | grep -P '\s*#+.*' ) ]] \

&& eval "${key}='${value}'" \

&& echo key=$key value=$value

done < "$config"

else

echo "$config not found."

fi

另一个简单的实现是这样的:

#!/bin/bash

config="$HOME/your.properties"

# 定义一个函数从properties文件读取key

function prop {

[ -f "$config" ] && grep -P "^\s*[^#]?${1}=.*$" $config | cut -d'=' -f2

}

# 调用示例

echo redis.port=$(prop "redis.port")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值