Создание практического менеджера конфигурации
Теперь, когда вы понимаете, как создавать и манипулировать ассоциативными массивами, давайте создадим что-то практичное. На этом этапе вы создадите простой менеджер конфигурации, который загружает настройки из файла конфигурации, хранит их в ассоциативном массиве и позволяет вам получать к ним доступ.
Шаг 1: Создание файла конфигурации
Сначала давайте создадим файл конфигурации с некоторыми примерами настроек:
- Создайте новый файл с именем
app_config.txt
в каталоге /home/labex/project
- Добавьте следующее содержимое в файл:
database_host=localhost
database_port=3306
database_user=admin
database_password=secret123
app_name=MyAwesomeApp
debug_mode=true
max_connections=100
- Сохраните файл
Шаг 2: Создание скрипта менеджера конфигурации
Теперь давайте создадим скрипт, который будет читать этот файл конфигурации и хранить его содержимое в ассоциативном массиве:
- Создайте новый файл с именем
config_manager.sh
в каталоге /home/labex/project
- Добавьте следующий код в файл:
#!/bin/bash
## Define the path to the configuration file
CONFIG_FILE="/home/labex/project/app_config.txt"
## Declare a key-value array for the configuration
declare -A config
## Function to load configuration from file
load_config() {
local file=$1
## Check if the file exists
if [[ ! -f "$file" ]]; then
echo "Error: Configuration file '$file' not found."
return 1
fi
## Read the file line by line
while IFS='=' read -r key value; do
## Skip empty lines and comments
if [[ -z "$key" || "$key" == \#* ]]; then
continue
fi
## Store the key-value pair in the array
config["$key"]="$value"
done < "$file"
echo "Configuration loaded successfully from '$file'"
return 0
}
## Function to get a configuration value
get_config() {
local key=$1
local default=$2
## Check if the key exists
if [[ -v config["$key"] ]]; then
echo "${config["$key"]}"
else
echo "$default"
fi
}
## Function to display all configuration
display_config() {
echo "--- Configuration Settings ---"
for key in "${!config[@]}"; do
echo "$key = ${config[$key]}"
done
}
## Load the configuration
load_config "$CONFIG_FILE"
## Display all configuration settings
display_config
## Example of getting specific configuration values
echo -e "\n--- Example Usage ---"
db_host=$(get_config "database_host" "127.0.0.1")
db_port=$(get_config "database_port" "5432")
db_user=$(get_config "database_user" "root")
db_pass=$(get_config "database_password" "")
app_name=$(get_config "app_name" "DefaultApp")
debug_mode=$(get_config "debug_mode" "false")
echo "Database connection: $db_user@$db_host:$db_port"
echo "Application name: $app_name"
echo "Debug mode: $debug_mode"
## Example of getting a non-existent value (will use default)
timeout=$(get_config "connection_timeout" "30")
echo "Connection timeout: $timeout (default value used)"
- Сохраните файл (Ctrl+S или File > Save)
- Сделайте скрипт исполняемым:
chmod +x config_manager.sh
- Запустите скрипт:
./config_manager.sh
Вы должны увидеть вывод, похожий на этот:
Configuration loaded successfully from '/home/labex/project/app_config.txt'
--- Configuration Settings ---
database_host = localhost
database_port = 3306
database_user = admin
database_password = secret123
app_name = MyAwesomeApp
debug_mode = true
max_connections = 100
--- Example Usage ---
Database connection: admin@localhost:3306
Application name: MyAwesomeApp
Debug mode: true
Connection timeout: 30 (default value used)
Понимание менеджера конфигурации
Скрипт, который вы создали, выполняет несколько важных действий:
- Он читает пары ключ-значение из файла конфигурации
- Он хранит эти пары в ассоциативном массиве
- Он предоставляет функции для:
- Загрузки конфигурации из файла
- Получения конкретных значений конфигурации с резервными значениями по умолчанию
- Отображения всех настроек конфигурации
Этот шаблон обычно используется в реальных приложениях для управления настройками конфигурации. Основные преимущества:
- Централизованная конфигурация: Все настройки находятся в одном месте
- Значения по умолчанию: Если настройка отсутствует, можно использовать значение по умолчанию
- Легкий доступ: Доступ к настройкам можно получить по имени
- Гибкость: Конфигурацию можно обновить, не изменяя скрипт
Этот пример демонстрирует, как ассоциативные массивы можно использовать для решения практических задач в скриптинге оболочки. Вы можете расширить его, добавив функции для сохранения изменений обратно в файл конфигурации или для проверки настроек.