All posts
bash3 min read

Creating and Managing Configuration Files via Shell Scripts

Configuration files (.ini, .env, .yaml, etc.) play a crucial role in managing application settings, database connections, and environment-specific configurations

Introduction

Configuration files (.ini, .env, .yaml, etc.) play a crucial role in managing application settings, database connections, and environment-specific configurations. Automating their creation and modification using shell scripts can greatly simplify deployment processes and ensure consistency across environments.

Why Automate Configuration Files?

  • Saves Time: Manually editing configuration files can be tedious and error-prone.
  • Ensures Consistency: Automating config generation prevents misconfigurations across different environments.
  • Enhances Security: Sensitive data can be handled securely without hardcoding credentials in files.
  • Simplifies Deployment: Automating config setup makes deployments more repeatable and scalable.

Creating Configuration Files with Shell Scripts

The .env file is widely used for managing environment variables.

#!/bin/bash

# Define environment variables
env_file=".env"
cat > "$env_file" <<EOL
DB_HOST=localhost
DB_USER=root
DB_PASS=$(openssl rand -base64 12) # Generate a secure password
NODE_ENV=production
EOL

echo "Configuration file created: $env_file"

Explanation:

  • Uses cat with a here-document EOL to write to the .env file.
  • Generates a random password securely.
  • Creates a reusable script that can be run on multiple machines.

Creating a YAML Configuration File

YAML files are commonly used for structured configuration.

#!/bin/bash

config_file="config.yaml"

cat > "$config_file" <<EOL
server:
  port: 8080
  host: "localhost"
database:
  user: "admin"
  password: "$(openssl rand -base64 12)"
  name: "app_db"
EOL

echo "YAML configuration file created: $config_file"

Uses cat to write structured YAML data and generates a secure database password dynamically.

Updating an Existing Configuration File

If you need to modify an existing file, use sed or awk.

Updating a Value in a .env File

sed -i 's/^DB_HOST=.*/DB_HOST=127.0.0.1/' .env
echo "Updated DB_HOST in .env file"

sed finds lines starting with DB_HOST= and replaces them with a new value while the -i flag edits the file in place and appending to a File Safely

echo "NEW_VARIABLE=value" >> .env
echo "Added NEW_VARIABLE to .env file"

>> appends a new variable without overwriting existing content.

Managing Different Environments

Create separate config files for development, testing, and production environments dynamically.

#!/bin/bash

env="$1"  # Accept environment as an argument
config_file="config-$env.yaml"

cat > "$config_file" <<EOL
server:
  port: 8080
database:
  user: "${env}_user"
  password: "$(openssl rand -base64 12)"
EOL

echo "Configuration for $env created: $config_file"
  • Usage:
bash generate_config.sh production
bash generate_config.sh development

This script generates a configuration file (config-production.yaml, config-development.yaml, etc.) based on the environment parameter.

Best Practices

  • Keep Secrets Secure: Avoid committing .env files to version control (use .gitignore).
  • Use Environment Variables: Store sensitive data in environment variables instead of hardcoding.
  • Automate with CI/CD: Use these scripts in deployment pipelines to generate configurations dynamically.
  • Backup Before Modifying: Always back up configuration files before making changes (cp config.yaml config.yaml.bak).

Conclusion

Automating configuration file creation and management with shell scripts ensures a more efficient and secure workflow. Whether you’re handling .env, .yaml, or .ini files, scripting their setup improves scalability and consistency in deployment processes. Start implementing these techniques today to streamline your application configurations!