Shell脚本读取并解析后缀为.conf的配置文件

在Linux系统中,各种服务配置多用的是后缀为 .conf 的文件,主要特征有:

  1. 第一个非空字符为#的行为注释行,解析时直接跳过
  2. 有效行格式是用等号=分割,类似: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所有,转载请注明出处。)