Erweiterte Techniken für Standardwerte
Nachdem Sie die Grundlagen des Festlegens von Standardwerten in Bash verstanden haben, wollen wir einige erweiterte Techniken untersuchen, die Ihre Skripte noch leistungsfähiger und flexibler machen.
Der :=
Zuweisungsoperator
Der :=
-Operator ersetzt nicht nur einen Standardwert, sondern weist diesen Wert auch der Variable zu, wenn sie nicht gesetzt war. Dies ist nützlich, wenn Sie möchten, dass die Variable ihren Standardwert für die spätere Verwendung beibehält.
- Erstellen Sie eine neue Datei namens
assign_default.sh
im Verzeichnis bash_defaults
mit folgendem Inhalt:
#!/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
- Machen Sie das Skript ausführbar:
chmod +x assign_default.sh
- Führen Sie das Skript aus, ohne NAME zu setzen:
./assign_default.sh
Sie sollten sehen:
Before assignment, NAME =
After assignment, NAME = DefaultUser
Hello, DefaultUser!
- Setzen Sie nun NAME, bevor Sie es ausführen:
NAME="Alice" ./assign_default.sh
Sie sollten sehen:
Before assignment, NAME = Alice
After assignment, NAME = Alice
Hello, Alice!
Verketten von Standardwerten
Manchmal möchten Sie möglicherweise mehrere Quellen nach einem Wert durchsuchen, bevor Sie auf einen fest codierten Standardwert zurückgreifen. Sie können Standardwerte verketten, um dies zu erreichen:
- Erstellen Sie eine neue Datei namens
chain_defaults.sh
im Verzeichnis bash_defaults
mit folgendem Inhalt:
#!/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."
- Machen Sie das Skript ausführbar:
chmod +x chain_defaults.sh
- Erstellen Sie eine Konfigurationsdatei zum Testen:
echo "CONFIG_USER=ConfigUser" > user.conf
echo "CONFIG_LANG=es_ES" >> user.conf
- Testen Sie das Skript mit verschiedenen Kombinationen:
## 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
Bedingte Standardwerte
Sie können auch bedingte Ausdrücke verwenden, um verschiedene Standardwerte basierend auf Bedingungen festzulegen:
- Erstellen Sie eine neue Datei namens
conditional_defaults.sh
im Verzeichnis bash_defaults
mit folgendem Inhalt:
#!/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)."
- Machen Sie das Skript ausführbar:
chmod +x conditional_defaults.sh
- Führen Sie das Skript aus, um zu sehen, wie es eine Standardbegrüßung basierend auf der Tageszeit auswählt:
./conditional_defaults.sh
- Überschreiben Sie die Standardbegrüßung:
./conditional_defaults.sh "Hello" "World"
Diese erweiterten Techniken geben Ihnen mehr Flexibilität bei der Arbeit mit Standardwerten in Bash und ermöglichen es Ihnen, anspruchsvollere und benutzerfreundlichere Skripte zu erstellen.