A robust shell script library for parsing and manipulating INI configuration files in Bash.
You can try the Bash INI Parser directly in your browser through our interactive web demo. The demo provides a terminal environment with pre-loaded example files so you can test the library without installation.
- Read and write values from/to INI files
- List sections and keys in INI files
- Add, update, and remove sections and keys
- Supports complex values including quotes, spaces, and special characters
- Array support for storing multiple values
- Import/export functionality between files and environment variables
- Extensive error handling with detailed error messages
- Debug mode for troubleshooting
- Configurable behavior through environment variables
- Backwards compatible with previous versions
Simply include the lib_ini.sh
script in your project and source it in your shell scripts:
source /path/to/lib_ini.sh
#!/bin/bash
source ./lib_ini.sh
# Create a new INI file with sections and keys
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"
# Read values
app_name=$(ini_read "$CONFIG_FILE" "app" "name")
echo "App name: $app_name"
# List sections and keys
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
# Remove a key
ini_remove_key "$CONFIG_FILE" "app" "name"
# Remove a section
ini_remove_section "$CONFIG_FILE" "app"
# Write array values
ini_write_array "$CONFIG_FILE" "app" "supported_formats" "jpg" "png" "gif"
# Read array values
formats=$(ini_read_array "$CONFIG_FILE" "app" "supported_formats")
for format in $formats; do
echo "Format: $format"
done
# Get a value or use a default if not found
timeout=$(ini_get_or_default "$CONFIG_FILE" "app" "timeout" "30")
# Export all INI values to environment variables with a prefix
ini_to_env "$CONFIG_FILE" "CFG"
echo "App name from env: $CFG_app_name"
# Export only one section
ini_to_env "$CONFIG_FILE" "CFG" "database"
# Import all values from one INI file to another
ini_import "defaults.ini" "config.ini"
# Import only specific sections
ini_import "defaults.ini" "config.ini" "section1" "section2"
if ini_key_exists "config.ini" "app" "version"; then
echo "The key exists"
fi
The library's behavior can be customized by setting these variables either directly in your script after sourcing the library or as environment variables before sourcing the library:
# Method 1: Set in your script after sourcing
source ./lib_ini.sh
INI_DEBUG=1
# Method 2: Set as environment variables before sourcing
export INI_DEBUG=1
source ./lib_ini.sh
Available configuration options:
# Enable debug mode to see detailed operations
INI_DEBUG=1
# Enable strict validation of section and key names
INI_STRICT=1
# Allow empty values
INI_ALLOW_EMPTY_VALUES=1
# Allow spaces in section and key names
INI_ALLOW_SPACES_IN_NAMES=1
- Input validation for all parameters
- Secure regex handling with proper escaping of special characters
- Temporary file security to prevent data corruption
- File permission checks to ensure proper access rights
- Automatic directory creation when needed
ini_check_file
automatically creates directories and verifies permissions- Atomic write operations to prevent file corruption during updates
- Support for quoted values and special characters
- Better handling of complex strings
- Robust error detection and reporting
ini_debug
- Displays debug messages when debug mode is enabledini_error
- Standardized error message formatini_validate_section_name
andini_validate_key_name
- Validate input dataini_create_temp_file
- Creates temporary files securelyini_trim
- Removes whitespace from stringsini_escape_for_regex
- Properly escapes special characters
# Import default settings, then override with user settings
ini_import "defaults.ini" "config.ini"
ini_import "user_prefs.ini" "config.ini"
# Copy specific sections between files
ini_import "source.ini" "target.ini" "section1" "section2"
# Load database configuration into environment variables
ini_to_env "database.ini" "DB"
# Use in database commands
mysql -h "$DB_mysql_host" -u "$DB_mysql_user" -p"$DB_mysql_password" "$DB_mysql_database"
# Store a list of roles in an array
ini_write_array "config.ini" "permissions" "roles" "admin" "user" "guest"
# Read and process array values
roles=$(ini_read_array "config.ini" "permissions" "roles")
for role in $roles; do
echo "Processing role: $role"
# Additional processing...
done
Check the examples
directory for complete usage examples:
basic_usage.sh
: Demonstrates core functionalityadvanced_usage.sh
: Shows advanced features
This project is licensed under the BSD License, a permissive free software license with minimal restrictions on the use and distribution of covered software.
- Leandro Ferreira
- Website: leandrosf.com
Contributions are welcome! Please feel free to submit a Pull Request.