Prüfen, ob ein RPM-Paket in einem Array vorhanden ist

Prüfen, ob ein RPM-Paket in einem Array vorhanden ist

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:

  1. rpm -qa, ist da wirklich ein Argument nötig? rpm -qJa.
  2. rpm ! -qa, funktioniert nicht auf der Shell ! rpm -qa.

Antwort2

Ihr Code sieht unvollständig aus, Ihnen fehlt ein Abschluss donefür Ihre forSchleife. Wenn die ifKlausel innerhalb Ihrer Schleife steht, exitwerden 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

verwandte Informationen