linux/shell:读取包含'.'键名的.properties文件

时间:2022-06-24
本文章向大家介绍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")