Techniques avancées pour les valeurs par défaut
Maintenant que vous comprenez les bases de la définition des valeurs par défaut en Bash, explorons quelques techniques avancées qui rendront vos scripts encore plus puissants et flexibles.
L'opérateur d'affectation :=
L'opérateur :=
non seulement substitue une valeur par défaut, mais affecte également cette valeur à la variable si elle n'était pas définie. Ceci est utile lorsque vous souhaitez que la variable conserve sa valeur par défaut pour une utilisation ultérieure.
- Créez un nouveau fichier nommé
assign_default.sh
dans le répertoire bash_defaults
avec le contenu suivant :
#!/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
- Rendez le script exécutable :
chmod +x assign_default.sh
- Exécutez le script sans définir NAME :
./assign_default.sh
Vous devriez voir :
Before assignment, NAME =
After assignment, NAME = DefaultUser
Hello, DefaultUser!
- Maintenant, définissez NAME avant l'exécution :
NAME="Alice" ./assign_default.sh
Vous devriez voir :
Before assignment, NAME = Alice
After assignment, NAME = Alice
Hello, Alice!
Chaînage des valeurs par défaut
Parfois, vous souhaiterez peut-être vérifier plusieurs sources pour une valeur avant de revenir à une valeur par défaut codée en dur. Vous pouvez chaîner des valeurs par défaut pour y parvenir :
- Créez un nouveau fichier nommé
chain_defaults.sh
dans le répertoire bash_defaults
avec le contenu suivant :
#!/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."
- Rendez le script exécutable :
chmod +x chain_defaults.sh
- Créez un fichier de configuration pour les tests :
echo "CONFIG_USER=ConfigUser" > user.conf
echo "CONFIG_LANG=es_ES" >> user.conf
- Testez le script avec différentes combinaisons :
## 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
Valeurs par défaut conditionnelles
Vous pouvez également utiliser des expressions conditionnelles pour définir différentes valeurs par défaut en fonction des conditions :
- Créez un nouveau fichier nommé
conditional_defaults.sh
dans le répertoire bash_defaults
avec le contenu suivant :
#!/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)."
- Rendez le script exécutable :
chmod +x conditional_defaults.sh
- Exécutez le script pour voir comment il choisit une salutation par défaut en fonction de l'heure de la journée :
./conditional_defaults.sh
- Remplacez la salutation par défaut :
./conditional_defaults.sh "Hello" "World"
Ces techniques avancées vous offrent plus de flexibilité lorsque vous travaillez avec des valeurs par défaut en Bash, vous permettant de créer des scripts plus sophistiqués et conviviaux.