檢查數組中是否存在 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

我看到兩個問題:

  1. rpm -qa,真的需要爭論嗎?rpm -q做。
  2. rpm ! -qa,在 shell 上不起作用! 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

相關內容