本文目录导读:

我来介绍几种常用脚本来读取配置文件的方法,包括Shell、Python和Node.js。
Shell 脚本读取配置文件
使用source命令(简单键值对)
#!/bin/bash # config.conf 内容示例: # DB_HOST=localhost # DB_PORT=3306 # DB_USER=root # 加载配置文件 source config.conf # 使用配置 echo "数据库地址: $DB_HOST" echo "端口: $DB_PORT" echo "用户: $DB_USER"
使用awk/sed解析(更精细控制)
#!/bin/bash
# 读取特定配置项
get_config() {
local key=$1
local file=$2
grep "^${key}=" "$file" | cut -d'=' -f2-
}
# 使用
DB_HOST=$(get_config "DB_HOST" "config.conf")
echo "数据库地址: $DB_HOST"
支持注释和空格
#!/bin/bash
# 支持 # 注释和空行
while IFS='=' read -r key value
do
if [[ ! "$key" =~ ^# ]] && [[ -n "$key" ]]; then
key=$(echo "$key" | tr -d ' ')
value=$(echo "$value" | tr -d ' ')
eval "${key}=${value}"
fi
done < config.conf
echo "配置项: $DB_HOST"
Python 读取配置文件
使用 configparser(标准INI格式)
import configparser
import json
# config.ini 内容示例:
# [database]
# host = localhost
# port = 3306
# user = root
config = configparser.ConfigParser()
config.read('config.ini')
# 读取配置
db_host = config['database']['host']
db_port = config.getint('database', 'port') # 转换为整数
db_user = config['database'].get('user', 'default_user') # 带默认值
print(f"数据库地址: {db_host}")
print(f"端口: {db_port}")
读取JSON配置文件
import json
# config.json 内容:
# {
# "database": {
# "host": "localhost",
# "port": 3306
# }
# }
with open('config.json', 'r') as f:
config = json.load(f)
db_config = config['database']
print(f"主机: {db_config['host']}")
读取YAML配置文件(需要安装pyyaml)
import yaml
# config.yaml 内容:
# database:
# host: localhost
# port: 3306
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
print(f"数据库地址: {config['database']['host']}")
Node.js 读取配置文件
读取JSON配置
// config.json
const fs = require('fs');
// 同步读取
const config = JSON.parse(fs.readFileSync('config.json', 'utf8'));
console.log(config.database.host);
// 异步读取
fs.readFile('config.json', 'utf8', (err, data) => {
if (err) throw err;
const config = JSON.parse(data);
console.log(config.database.host);
});
使用 dotenv(环境变量配置)
// .env 文件
// DB_HOST=localhost
// DB_PORT=3306
require('dotenv').config();
console.log(process.env.DB_HOST);
console.log(process.env.DB_PORT);
读取INI格式配置
// 简单INI解析器
const fs = require('fs');
function parseINI(content) {
const result = {};
let currentSection = '';
content.split('\n').forEach(line => {
line = line.trim();
if (!line || line.startsWith('#')) return;
if (line.startsWith('[') && line.endsWith(']')) {
currentSection = line.slice(1, -1);
result[currentSection] = {};
} else {
const [key, value] = line.split('=');
if (currentSection) {
result[currentSection][key.trim()] = value.trim();
} else {
result[key.trim()] = value.trim();
}
}
});
return result;
}
const config = parseINI(fs.readFileSync('config.ini', 'utf8'));
console.log(config.database.host);
通用配置文件格式示例
示例配置文件(三种格式)
config.ini:
; 数据库配置 [database] host = localhost port = 3306 user = root password = 123456 ; 日志配置 [log] level = INFO path = /var/log/app.log
config.json:
{
"database": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "123456"
},
"log": {
"level": "INFO",
"path": "/var/log/app.log"
}
}
config.yaml:
database: host: localhost port: 3306 user: root password: '123456' log: level: INFO path: /var/log/app.log
高级功能示例
Python带默认值和类型转换
import configparser
import os
config = configparser.ConfigParser()
config.read('config.ini')
# 带默认值的读取
host = config.get('database', 'host', fallback='localhost')
port = config.getint('database', 'port', fallback=3306)
timeout = config.getfloat('database', 'timeout', fallback=30.0)
is_debug = config.getboolean('log', 'debug', fallback=False)
print(f"主机: {host}, 端口: {port}")
Shell带错误检查
#!/bin/bash
# 检查配置文件是否存在
CONFIG_FILE="config.conf"
if [ ! -f "$CONFIG_FILE" ]; then
echo "配置文件 $CONFIG_FILE 不存在!"
exit 1
fi
# 加载配置
source "$CONFIG_FILE"
# 检查必要配置是否存在
REQUIRED_VARS=("DB_HOST" "DB_USER" "DB_PASSWORD")
for var in "${REQUIRED_VARS[@]}"; do
if [ -z "${!var}" ]; then
echo "缺少必要配置: $var"
exit 1
fi
done
选择建议:
- 简单配置使用 INI格式(Python configparser、Shell source)
- 复杂配置使用 JSON(Python json、Node.js JSON.parse)
- 需要注释和层级使用 YAML(Python yaml库)
- 环境变量使用 .env(Node.js dotenv)
根据你的具体需求和编程环境选择合适的方案!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播