Shell脚本读取并解析后缀为.conf的配置文件
2023-11-09
在Linux系统中,各种服务配置多用的是后缀为 .conf 的文件,主要特征有:
- 第一个非空字符为#的行为注释行,解析时直接跳过
- 有效行格式是用等号=分割,类似:key = value;
本文提供一个解析配置文件的shell脚本,注释很详细:
#!/bin/bash
# 定义文件名变量
FILE_SRC=./my-server.conf
# 解析文件,并将解析结果存储在变量中
while IFS='=' read -r key value; do
# 去除各自前后的空格
key=$(echo "$key" | xargs)
value=$(echo "$value" | xargs)
# 如果key为空,跳过该行
if [[ -z $key ]]; then
continue
fi
# 如果value为空,跳过该行
if [[ -z $value ]]; then
continue
fi
# 如果key的第一个字符为#,跳过该行
if [[ $key == "#"* ]]; then
continue
fi
# 如果value的第一个字符为#,跳过该行
if [[ $value == "#"* ]]; then
continue
fi
# 移除末尾分号
value=$(echo "$value" | tr -d ';')
# 如果value是纯数字,直接写入文件,不需要引号
if [[ $value =~ ^[0-9]+$ ]]; then
echo "define('$key',$value);"
# 如果value是布尔值,直接写入文件,不需要引号
elif [[ $value == "true" || $value == "false" ]]; then
echo "define('$key',$value);"
else
# 如果value不是纯数字或布尔值,直接写入文件,需要引号
echo "define('$key','$value');"
fi
done < "$FILE_SRC"
示例配置文件:
################################ DB Config ################################
DB_NAME = 'cpury_db'
DB_USER=root;
DB_PASSWORD=jsksdad
DB_HOST=localhost
DB_CONNECT_MAX=112333
解析结果:
define('DB_NAME','cpury_db');
define('DB_USER','root');
define('DB_PASSWORD','jsksdad');
define('DB_HOST','localhost');
define('DB_CONNECT_MAX',112333);
这个输出结果参考PHP语言风格,定义宏变量。此处格式支持自定义,按需修改shell脚本即可。
(版权归cpury.com所有,转载请注明出处。)