Я пытаюсь выяснить, существуют ли определенные пакеты 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 проблемы:
rpm -qa
, действительно ли это требует аргументовrpm -q
?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