Ich versuche herauszufinden, ob bestimmte RPM-Pakete in einem Array vorhanden sind. Wenn eines der Pakete fehlt, wird es mit der Meldung „Paket existiert nicht“ beendet. Hier ist mein Code
#!/bin/bash
echo "Checking for Pre-requisites X11 libraries required for installation"
my_array=(xorg-x11-drivers xorg-x11-utils xorg-x11-xauth xorg-x11-xinit initial-setup-gui initial-
setup-gui install initial-setup-gui glx-utils )
for (( i = 0; i < ${#my_array[@]} ; i++ )); do
#printf "\n**** checking: ${my_array[$i]} *****\n\n"
if rpm ! -qa "${my_array[$i]}"
then
echo "Package missing"
exit 1
else
echo "All Package available"
exit
fi
Erledigt
Aber dieses hier scheint das Gegenteil zu tun, nämlich das Finden eines passenden Pakets. Kann mir bitte jemand sagen, warum ich hier Fehler mache?
Antwort1
Ich sehe zwei Probleme:
rpm -qa
, ist da wirklich ein Argument nötig?rpm -q
Ja.rpm ! -qa
, funktioniert nicht auf der Shell! rpm -qa
.
Antwort2
Ihr Code sieht unvollständig aus, Ihnen fehlt ein Abschluss done
für Ihre for
Schleife. Wenn die if
Klausel innerhalb Ihrer Schleife steht, exit
werden die Befehle das gesamte Skript stoppen (da Sie dies auf beiden Seiten der haben else
, wird es immer nach dem ersten Element stoppen).
Das Array auf diese Weise zu integrieren wird wahrscheinlich funktionieren, aber es gibt einfachere Möglichkeiten. Zum Beispiel (ungetestet):
echo "Checking for Pre-requisites X11 libraries required for installation"
my_array=(xorg-x11-drivers xorg-x11-utils xorg-x11-xauth xorg-x11-xinit initial-setup-gui initial-setup-gui install initial-setup-gui glx-utils )
missing=()
for package in "${my_array[@])"; do
rpm -q "${package}" || missing+=("${package}")
done
if [ ${#missing[@]} -gt 0 ] ; then
echo "Packages missing: ${missing[@]}"
exit 1
else
echo "All Packages available"
exit
fi