Skript sauber strukturiert und mit Logging

This commit is contained in:
2025-06-15 23:30:47 +02:00
parent 3be5ab9edd
commit 4a9bf3247a

View File

@@ -4,19 +4,26 @@
FILE_URL="http://fileserver.fritz.box/Mobaxterm/Homelab.mxtsessions"
INPUT_FILE="Homelab.mxtsessions"
OUTPUT_FILE="serverliste.csv"
LOG_FILE="script.log"
log() {
echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a "$LOG_FILE"
}
download_file() {
# Vor dem Download ggf. existierende Dateien mit Zähler löschen
rm -f Homelab.mxtsessions* 2>/dev/null
# Datei herunterladen (nur wenn erfolgreich, dann weitermachen)
if wget -q "$FILE_URL" -O "$INPUT_FILE"; then
echo "Datei erfolgreich heruntergeladen."
log "Datei erfolgreich heruntergeladen."
else
echo "Fehler: Datei konnte nicht heruntergeladen werden. Skript wird beendet."
log "Fehler: Datei konnte nicht heruntergeladen werden. Skript wird beendet."
exit 1
fi
}
# CSV-Datei vorbereiten
extract_data() {
echo "Name,Adresse / Host" > "$OUTPUT_FILE"
# Daten aus der MobaXterm-Datei extrahieren und in CSV schreiben
awk '
/^\[Bookmarks/ { in_section=1; next }
/^\[/ && !/^\[Bookmarks/ { in_section=0 }
@@ -24,25 +31,25 @@ awk '
split($0, parts, "=")
name = parts[1]
split(parts[2], details, "%")
host = details[2] # Hier ist die IP oder URL
host = details[2]
gsub(/.*\\n/, "", name)
print name "," host
}
' "$INPUT_FILE" >> "$OUTPUT_FILE"
log "Daten extrahiert und in $OUTPUT_FILE gespeichert."
}
echo "Export abgeschlossen: $OUTPUT_FILE"
# Arrays für Menü vorbereiten
declare -a server_names
declare -a ip_addresses
# CSV ohne Kopfzeile einlesen
read_server_list() {
server_names=()
ip_addresses=()
while IFS="," read -r name ip; do
server_names+=("$name")
ip_addresses+=("$ip")
done < <(tail -n +2 "$OUTPUT_FILE")
log "Serverliste erfolgreich eingelesen."
}
# Menü anzeigen
show_menu() {
while true; do
menu_entries=()
for i in "${!server_names[@]}"; do
@@ -55,11 +62,22 @@ while true; do
"${menu_entries[@]}" 3>&1 1>&2 2>&3)
if [[ $? -ne 0 || "$gui_choice" == "q" ]]; then
echo "Programm beendet."
log "Benutzer hat das Programm beendet."
exit 0
fi
index=$gui_choice
echo "Verbinde zu ${server_names[index]} (${ip_addresses[index]})..."
log "Verbinde zu ${server_names[index]} (${ip_addresses[index]})..."
ssh ${ip_addresses[index]}
done
}
main() {
log "Skript gestartet."
download_file
extract_data
read_server_list
show_menu
}
main