проверка наличия пакета RPM в массиве

проверка наличия пакета RPM в массиве

Я пытаюсь выяснить, существуют ли определенные пакеты RPM в массиве. Если какой-либо пакет отсутствует, произойдет выход с сообщением «Пакет не существует». Вот мой код

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

сделанный

Но этот, похоже, делает противоположное, выходя при поиске соответствующего пакета. Может кто-нибудь, пожалуйста, дайте мне знать, как я тут облажался?

решение1

Я вижу 2 проблемы:

  1. rpm -qa, действительно ли это требует аргументов rpm -q?
  2. rpm ! -qa, не работает на оболочке ! rpm -qa.

решение2

Ваш код выглядит неполным, вам не хватает закрытия doneдля вашего forцикла. Если ifпредложение находится внутри вашего цикла, exitкоманды приведут к остановке всего скрипта (поскольку у вас есть это с обеих сторон else, он всегда остановится после первого элемента.)

Такое взаимодействие с массивом, вероятно, сработает, но есть и более простые способы. Например (не проверено):

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

Связанный контент