comprobar si existe un paquete rpm en una matriz

comprobar si existe un paquete rpm en una matriz

Estoy intentando averiguar si ciertos paquetes RPM existen en una matriz. Si falta algo del paquete, saldrá con el mensaje "El paquete no existe". Aquí está mi código.

#!/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

hecho

Pero este parece hacer lo contrario que salir al encontrar un paquete coincidente. ¿Puede alguien decirme cómo me estoy equivocando aquí?

Respuesta1

Veo 2 problemas:

  1. rpm -qa¿Realmente hace falta una discusión? rpm -qhace.
  2. rpm ! -qa, no funciona en el shell ! rpm -qa.

Respuesta2

Su código parece incompleto, le falta un cierre donepara su forciclo. Si la ifcláusula está dentro de su bucle, los exitcomandos harán que todo el script se detenga (dado que tiene esto en ambos lados del else, siempre se detendrá después del primer elemento).

Interactuar la matriz de esta manera probablemente funcionará, pero hay formas más sencillas de hacerlo. Por ejemplo (no probado):

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

información relacionada