Bash-ini-parser: Advanced bash INI parser library
文章介绍了一个名为 `Bash-ini-parser` 的 Bash INI 解析器库,它提供读取、写入、列出、添加、更新、删除 INI 文件中 section 和 key 的功能,支持数组、导入导出、错误处理、调试模式等。该库通过 `lib_ini.sh` 脚本引入,提供基本和高级用法示例,并支持配置选项。文章还强调了库的安全性和功能增强,以及与其他脚本的集成示例。
Bash-ini-parser:一款强大的 Bash INI 解析器库
导航菜单
-
Product
- GitHub Copilot Write better code with AI
- GitHub Advanced Security Find and fix vulnerabilities
- Actions Automate any workflow
- Codespaces Instant dev environments
- Issues Plan and track work
- Code Review Manage code changes
- Discussions Collaborate outside of code
- Code Search Find more, search less
Explore
-
Solutions
By company size
By use case
By industry
-
Resources
Topics
Explore
-
Open Source
Repositories
-
Enterprise
Available add-ons
lsferreira42/bash-ini-parser
一个用于在 Bash 中解析和操作 INI 配置文件的强大 shell 脚本库。
lsferreira42.github.io/bash-ini-parser/
许可证
尝试在线体验
你可以通过我们的交互式 Web 演示,直接在浏览器中尝试 Bash INI Parser。该演示提供了一个预先加载了示例文件的终端环境,因此你无需安装即可测试该库。
功能特性
- 读取和写入 INI 文件中的值
- 列出 INI 文件中的 section 和 key
- 添加、更新和删除 section 和 key
- 支持复杂的值,包括引号、空格和特殊字符
- 数组支持,用于存储多个值
- 导入/导出功能,可以在文件和环境变量之间进行转换
- 广泛的错误处理,提供详细的错误消息
- 调试模式,用于故障排除
- 可配置的行为,通过环境变量进行配置
- 向后兼容以前的版本
安装
只需将 lib_ini.sh
脚本包含在你的项目中,并在你的 shell 脚本中 source 它:
source /path/to/lib_ini.sh
基本用法
#!/bin/bash
source ./lib_ini.sh
# 创建一个新的 INI 文件,包含 section 和 key
CONFIG_FILE="config.ini"
ini_add_section "$CONFIG_FILE" "app"
ini_write "$CONFIG_FILE" "app" "name" "My Application"
ini_write "$CONFIG_FILE" "app" "version" "1.0.0"
# 读取值
app_name=$(ini_read "$CONFIG_FILE" "app" "name")
echo "App name: $app_name"
# 列出 section 和 key
echo "Available sections:"
ini_list_sections "$CONFIG_FILE" | while read section; do
echo "- $section"
echo " Keys:"
ini_list_keys "$CONFIG_FILE" "$section" | while read key; do
value=$(ini_read "$CONFIG_FILE" "$section" "$key")
echo " - $key = $value"
done
done
# 删除一个 key
ini_remove_key "$CONFIG_FILE" "app" "name"
# 删除一个 section
ini_remove_section "$CONFIG_FILE" "app"
高级功能
数组支持
# 写入数组值
ini_write_array "$CONFIG_FILE" "app" "supported_formats" "jpg" "png" "gif"
# 读取数组值
formats=$(ini_read_array "$CONFIG_FILE" "app" "supported_formats")
for format in $formats; do
echo "Format: $format"
done
默认值
# 获取一个值,如果未找到则使用默认值
timeout=$(ini_get_or_default "$CONFIG_FILE" "app" "timeout" "30")
环境变量导出
# 将所有 INI 值导出到环境变量,并添加前缀
ini_to_env "$CONFIG_FILE" "CFG"
echo "App name from env: $CFG_app_name"
# 只导出一个 section
ini_to_env "$CONFIG_FILE" "CFG" "database"
文件导入
# 将一个 INI 文件中的所有值导入到另一个 INI 文件中
ini_import "defaults.ini" "config.ini"
# 只导入特定的 section
ini_import "defaults.ini" "config.ini" "section1" "section2"
Key 存在性检查
if ini_key_exists "config.ini" "app" "version"; then
echo "The key exists"
fi
配置选项
可以通过在 source 该库之后直接在脚本中设置以下变量,或者在 source 该库之前将其设置为环境变量,来自定义库的行为:
# 方法 1:在 source 后在脚本中设置
source ./lib_ini.sh
INI_DEBUG=1
# 方法 2:在 source 之前设置为环境变量
export INI_DEBUG=1
source ./lib_ini.sh
可用的配置选项:
# 启用调试模式以查看详细的操作
INI_DEBUG=1
# 启用对 section 和 key 名称的严格验证
INI_STRICT=1
# 允许空值
INI_ALLOW_EMPTY_VALUES=1
# 允许在 section 和 key 名称中使用空格
INI_ALLOW_SPACES_IN_NAMES=1
库增强
安全改进
- 对所有参数进行输入验证
- 使用适当的特殊字符转义进行安全 regex 处理
- 临时文件安全以防止数据损坏
- 文件权限检查以确保正确的访问权限
- 必要时自动创建目录
核心功能增强
文件操作
ini_check_file
自动创建目录并验证权限- 原子写入操作可防止更新期间的文件损坏
读取和写入
- 支持带引号的值和特殊字符
- 更好地处理复杂字符串
- 强大的错误检测和报告
实用功能
ini_debug
- 调试模式启用时显示调试消息ini_error
- 标准化错误消息格式ini_validate_section_name
和ini_validate_key_name
- 验证输入数据ini_create_temp_file
- 安全地创建临时文件ini_trim
- 删除字符串中的空格ini_escape_for_regex
- 正确转义特殊字符
高级用法示例
使用多个文件
# 导入默认设置,然后使用用户设置覆盖
ini_import "defaults.ini" "config.ini"
ini_import "user_prefs.ini" "config.ini"
# 在文件之间复制特定 section
ini_import "source.ini" "target.ini" "section1" "section2"
与数据库脚本集成
# 将数据库配置加载到环境变量中
ini_to_env "database.ini" "DB"
# 在数据库命令中使用
mysql -h "$DB_mysql_host" -u "$DB_mysql_user" -p"$DB_mysql_password" "$DB_mysql_database"
数组操作
# 在数组中存储角色列表
ini_write_array "config.ini" "permissions" "roles" "admin" "user" "guest"
# 读取和处理数组值
roles=$(ini_read_array "config.ini" "permissions" "roles")
for role in $roles; do
echo "Processing role: $role"
# 附加处理...
done
示例
查看 examples
目录以获取完整的用法示例:
basic_usage.sh
: 演示核心功能advanced_usage.sh
: 展示高级功能
许可证
本项目采用 BSD 许可证,该许可证是一种宽松的自由软件许可证,对所涵盖软件的使用和分发限制最少。
作者
- Leandro Ferreira
- 网站:leandrosf.com
贡献
欢迎贡献!请随时提交 Pull Request。