Bash Arrays
Bash Arrays werden seltener genutzt als sie sollten. Sobald man mehrere zusammenhängende Werte in einem Script verwaltet sind sie die richtige Wahl.
Array erstellen
server=("web1" "web2" "web3")
Oder einzeln befüllen.
server[0]="web1" server[1]="web2"
Zugriff
echo "${server[0]}" # web1
echo "${server[@]}" # alle Elemente
echo "${#server[@]}" # Anzahl
echo "${server[@]:1:2}" # Slice: ab Index 1, 2 Elemente
Über ein Array iterieren
for s in "${server[@]}"; do
echo "Deploye auf $s"
ssh "$s" "/usr/local/bin/deploy.sh"
done
Element hinzufügen
server+=("web4")
Array aus Befehlsausgabe
dateien=($(find /var/log -name "*.log" -mtime +7))
Bei Leerzeichen in Dateinamen lieber mapfile nutzen.
mapfile -t dateien < <(find /var/log -name "*.log" -mtime +7)
Assoziatives Array
declare -A config
config["host"]="localhost"
config["port"]="3306"
config["name"]="meinedb"
echo "${config["host"]}"
for key in "${!config[@]}"; do
echo "$key = ${config[$key]}"
done
${!config[@]} gibt alle Schlüssel zurück.
Arrays in Bash haben ihre Tücken mit Leerzeichen. Immer "${array[@]}" mit Anführungszeichen — nie ${array[@]} ohne.