Criando um Gerenciador de Configuração Prático
Agora que você entende como criar e manipular arrays chave-valor, vamos construir algo prático. Nesta etapa, você criará um gerenciador de configuração simples que carrega configurações de um arquivo de configuração, armazena-as em um array chave-valor e permite que você as acesse.
Etapa 1: Criar um Arquivo de Configuração
Primeiro, vamos criar um arquivo de configuração com algumas configurações de exemplo:
- Crie um novo arquivo chamado
app_config.txt no diretório /home/labex/project
- Adicione o seguinte conteúdo ao arquivo:
database_host=localhost
database_port=3306
database_user=admin
database_password=secret123
app_name=MyAwesomeApp
debug_mode=true
max_connections=100
- Salve o arquivo
Etapa 2: Criar o Script do Gerenciador de Configuração
Agora, vamos criar um script que lerá este arquivo de configuração e armazenará seu conteúdo em um array chave-valor:
- Crie um novo arquivo chamado
config_manager.sh no diretório /home/labex/project
- Adicione o seguinte código ao arquivo:
#!/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)"
- Salve o arquivo (Ctrl+S ou File > Save)
- Torne o script executável:
chmod +x config_manager.sh
- Execute o script:
./config_manager.sh
Você deve ver uma saída semelhante a esta:
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)
Entendendo o Gerenciador de Configuração
O script que você criou faz várias coisas importantes:
- Ele lê pares chave-valor de um arquivo de configuração
- Ele armazena esses pares em um array chave-valor
- Ele fornece funções para:
- Carregar a configuração de um arquivo
- Obter valores de configuração específicos com valores padrão (default fallbacks)
- Exibir todas as configurações
Este padrão é comumente usado em aplicações do mundo real para gerenciar configurações. Os principais benefícios são:
- Configuração centralizada: Todas as configurações estão em um só lugar
- Valores padrão: Se uma configuração estiver faltando, um valor padrão pode ser usado
- Acesso fácil: As configurações podem ser acessadas por nome
- Flexibilidade: A configuração pode ser atualizada sem alterar o script
Este exemplo demonstra como arrays chave-valor podem ser usados para resolver problemas práticos em scripts de shell. Você pode estendê-lo adicionando funções para salvar as alterações de volta no arquivo de configuração ou para validar as configurações.