compare_extensions.sh
Dieses Skript vergleicht die aktivierten GNOME-Erweiterungen oder installierten Debian-Pakete auf zwei Rechnern und stellt die Unterschiede in einer HTML-Seite dar.
./compare_extensions.sh [Option]
-g: Vergleicht die aktivierten GNOME-Erweiterungen.
-p: Vergleicht die installierten Debian-Pakete.
Wenn das Skript ohne Parameter ausgeführt wird, wird eine Anleitung angezeigt.
#!/bin/bash
# compare_extensions.sh
# $Revision: 1.5 $
# WebDAV Verzeichnis, in dem die Ergebnisse abgelegt werden
WEBDAV_DIR="/path/to/webdav/directory"
RESULT_FILE="$WEBDAV_DIR/extensions_comparison.html"
get_revision() {
REVISION=$(grep -m 1 -oP 'Revision:\s*\K[^\s]+' "$0")
}
get_revision
# Funktion zur Generierung des GNOME-Erweiterungsvergleichs
function compare_gnome_extensions {
# Sammele aktivierte GNOME-Shell-Extensions
ENABLED_EXTS=$(gsettings get org.gnome.shell enabled-extensions | tr -d "[],\'")
# Erstelle eine Datei mit aktivierten Extensions auf diesem Rechner
HOSTNAME=$(hostname)
HOST_FILE="$WEBDAV_DIR/${HOSTNAME}_enabled_extensions.txt"
echo "$ENABLED_EXTS" | tr ' ' '\n' | sort | uniq > "$HOST_FILE"
# Wenn beide Rechner ihre Ergebnisse hochgeladen haben, vergleichen
if [[ $(ls "$WEBDAV_DIR"/*_enabled_extensions.txt | wc -l) -eq 2 ]]; then
echo "Beide Rechnerergebnisse sind vorhanden, vergleiche GNOME-Erweiterungen..."
FILES=($WEBDAV_DIR/*_enabled_extensions.txt)
HOST1=$(basename "${FILES[0]}" _enabled_extensions.txt)
HOST2=$(basename "${FILES[1]}" _enabled_extensions.txt)
HOST1_EXTS=$(sort "${FILES[0]}" | uniq)
HOST2_EXTS=$(sort "${FILES[1]}" | uniq)
ALL_EXTS=$(echo -e "$HOST1_EXTS\n$HOST2_EXTS" | sort | uniq)
generate_html_table "$HOST1" "$HOST2" "$ALL_EXTS" "$HOST1_EXTS" "$HOST2_EXTS"
else
echo "Warte auf das Ergebnis vom anderen Rechner für GNOME-Erweiterungen..."
fi
}
# Funktion zur Generierung des Debian-Paketvergleichs
function compare_debian_packages {
# Sammele installierte Debian-Pakete
INSTALLED_PKGS=$(apt list --installed 2>/dev/null | awk -F/ '{print $1}' | sort | uniq)
# Erstelle eine Datei mit installierten Paketen auf diesem Rechner
HOSTNAME=$(hostname)
HOST_FILE="$WEBDAV_DIR/${HOSTNAME}_installed_packages.txt"
echo "$INSTALLED_PKGS" > "$HOST_FILE"
# Wenn beide Rechner ihre Ergebnisse hochgeladen haben, vergleichen
if [[ $(ls "$WEBDAV_DIR"/*_installed_packages.txt | wc -l) -eq 2 ]]; then
echo "Beide Rechnerergebnisse sind vorhanden, vergleiche installierte Pakete..."
FILES=($WEBDAV_DIR/*_installed_packages.txt)
HOST1=$(basename "${FILES[0]}" _installed_packages.txt)
HOST2=$(basename "${FILES[1]}" _installed_packages.txt)
HOST1_PKGS=$(sort "${FILES[0]}" | uniq)
HOST2_PKGS=$(sort "${FILES[1]}" | uniq)
ALL_PKGS=$(echo -e "$HOST1_PKGS\n$HOST2_PKGS" | sort | uniq)
generate_html_table "$HOST1" "$HOST2" "$ALL_PKGS" "$HOST1_PKGS" "$HOST2_PKGS"
else
echo "Warte auf das Ergebnis vom anderen Rechner für installierte Pakete..."
fi
}
# Funktion zur Erstellung der HTML-Tabelle
function generate_html_table {
local HOST1=$1
local HOST2=$2
local ALL_ITEMS=$3
local HOST1_ITEMS=$4
local HOST2_ITEMS=$5
echo "<html><head><style>
table {
width: 90%;
margin: 0 auto;
border-collapse: separate;
border-spacing: 5px;
}
th {
background-color: #dedeee;
}
td {
background-color: #ddd;
}
.green-bg {
background-color: #a8d5a8;
}
</style></head><body>" > "$RESULT_FILE"
case ${opt} in
g )
OPT="compare_gnome_extensions"
;;
p )
OPT="compare_debian_packages"
;;
esac
echo "<h1 style='text-align: center; color: blue;'>Vergleiche ${OPT}<small><small>
(mit compare_extensions.sh V:$REVISION)
</small></small></h1>" >> "$RESULT_FILE"
echo "<table border='1'><tr><th>Item</th><th>$HOST1</th><th>$HOST2</th></tr>" >> "$RESULT_FILE"
for item in $ALL_ITEMS; do
echo -n "<tr><td>$item</td>" >> "$RESULT_FILE"
if grep -q "$item" <<< "$HOST1_ITEMS"; then
echo -n "<td class='green-bg'>✅</td>" >> "$RESULT_FILE"
else
echo -n "<td></td>" >> "$RESULT_FILE"
fi
if grep -q "$item" <<< "$HOST2_ITEMS"; then
echo -n "<td class='green-bg'>✅</td>" >> "$RESULT_FILE"
else
echo -n "<td></td>" >> "$RESULT_FILE"
fi
echo "</tr>" >> "$RESULT_FILE"
done
echo "</table></body></html>" >> "$RESULT_FILE"
echo "Ergebnis unter $RESULT_FILE gespeichert."
}
# Argument Parsing für verschiedene Vergleiche
if [ "$#" -eq 0 ]; then
echo "Nutzung: $0 [-g für GNOME Erweiterungen] [-p für Debian Pakete]"
exit 1
fi
while getopts ":gp" opt; do
case ${opt} in
g )
compare_gnome_extensions
;;
p )
compare_debian_packages
;;
\? )
echo "Nutzung: $0 [-g für GNOME Erweiterungen] [-p für Debian Pakete]"
;;
esac
done