verificando se existe um pacote rpm em um array

verificando se existe um pacote rpm em um array

Estou tentando descobrir se determinados pacotes RPM existem em uma matriz. se algum pacote estiver faltando, ele sairá com a mensagem "O pacote não existe". Aqui está o meu 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

feito

Mas este parece fazer o oposto de encontrar um pacote correspondente. Alguém pode me dizer como estou bagunçando tudo aqui?

Responder1

Vejo 2 problemas:

  1. rpm -qa, é realmente necessário um argumento? rpm -qfaz.
  2. rpm ! -qa, não funciona no shell ! rpm -qa.

Responder2

Seu código parece incompleto, está faltando um fechamento donepara o seu forloop. Se a ifcláusula estiver dentro do seu loop, os exitcomandos farão com que todo o script pare (visto que você tem isso em ambos os lados do else, ele sempre irá parar após o primeiro item).

Interagir o array dessa forma provavelmente funcionará, mas existem maneiras mais fáceis de fazer isso. Por exemplo (não testado):

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

informação relacionada