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:
rpm -qa
, é realmente necessário um argumento?rpm -q
faz.rpm ! -qa
, não funciona no shell! rpm -qa
.
Responder2
Seu código parece incompleto, está faltando um fechamento done
para o seu for
loop. Se a if
cláusula estiver dentro do seu loop, os exit
comandos 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