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, 쉘에서는 작동하지 않습니다 ! 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

관련 정보