如果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")