Técnicas Avançadas de Valor Padrão
Agora que você entende os conceitos básicos de como definir valores padrão em Bash, vamos explorar algumas técnicas avançadas que tornarão seus scripts ainda mais poderosos e flexíveis.
O Operador de Atribuição :=
O operador := não apenas substitui um valor padrão, mas também atribui esse valor à variável se ela não estiver definida. Isso é útil quando você deseja que a variável mantenha seu valor padrão para uso posterior.
- Crie um novo arquivo chamado
assign_default.sh no diretório bash_defaults com o seguinte conteúdo:
#!/bin/bash
## Demonstrate the := assignment operator
echo "Before assignment, NAME = $NAME"
## This assigns the default value to NAME if it's unset
: ${NAME:="DefaultUser"}
echo "After assignment, NAME = $NAME"
## Now use the variable in a function
greet() {
echo "Hello, $NAME!"
}
greet
- Torne o script executável:
chmod +x assign_default.sh
- Execute o script sem definir NAME:
./assign_default.sh
Você deve ver:
Before assignment, NAME =
After assignment, NAME = DefaultUser
Hello, DefaultUser!
- Agora defina NAME antes de executar:
NAME="Alice" ./assign_default.sh
Você deve ver:
Before assignment, NAME = Alice
After assignment, NAME = Alice
Hello, Alice!
Encadeando Valores Padrão
Às vezes, você pode querer verificar várias fontes para um valor antes de recorrer a um padrão codificado. Você pode encadear valores padrão para conseguir isso:
- Crie um novo arquivo chamado
chain_defaults.sh no diretório bash_defaults com o seguinte conteúdo:
#!/bin/bash
## Read config file if it exists
if [[ -f "./user.conf" ]]; then
source "./user.conf"
fi
## Chain default values: command line arg -> config file -> environment var -> hard-coded default
USERNAME=${1:-${CONFIG_USER:-${USER:-"guest"}}}
LANGUAGE=${2:-${CONFIG_LANG:-${LANG:-"en_US"}}}
echo "Hello, $USERNAME! Your language is set to $LANGUAGE."
- Torne o script executável:
chmod +x chain_defaults.sh
- Crie um arquivo de configuração para teste:
echo "CONFIG_USER=ConfigUser" > user.conf
echo "CONFIG_LANG=es_ES" >> user.conf
- Teste o script com diferentes combinações:
## Use defaults from the config file
./chain_defaults.sh
## Override with command line arguments
./chain_defaults.sh CommandLineUser fr_FR
## Remove config file to test falling back to environment variables
rm user.conf
./chain_defaults.sh
Valores Padrão Condicionais
Você também pode usar expressões condicionais para definir diferentes valores padrão com base em condições:
- Crie um novo arquivo chamado
conditional_defaults.sh no diretório bash_defaults com o seguinte conteúdo:
#!/bin/bash
## Get the current hour (24-hour format)
HOUR=$(date +%H)
## Set default greeting based on time of day
if ((HOUR < 12)); then
DEFAULT_GREETING="Good morning"
elif ((HOUR < 18)); then
DEFAULT_GREETING="Good afternoon"
else
DEFAULT_GREETING="Good evening"
fi
## Use the conditional default if no greeting is provided
GREETING=${1:-"$DEFAULT_GREETING"}
NAME=${2:-"User"}
echo "$GREETING, $NAME!"
echo "The current time is $(date +%H:%M)."
- Torne o script executável:
chmod +x conditional_defaults.sh
- Execute o script para ver como ele escolhe uma saudação padrão com base na hora do dia:
./conditional_defaults.sh
- Substitua a saudação padrão:
./conditional_defaults.sh "Hello" "World"
Essas técnicas avançadas oferecem mais flexibilidade ao trabalhar com valores padrão em Bash, permitindo que você crie scripts mais sofisticados e fáceis de usar.