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

관련 정보