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:
rpm -qa
¿Realmente hace falta una discusión?rpm -q
hace.rpm ! -qa
, no funciona en el shell! rpm -qa
.
Respuesta2
Su código parece incompleto, le falta un cierre done
para su for
ciclo. Si la if
cláusula está dentro de su bucle, los exit
comandos 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