특정 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
두 가지 문제가 있습니다.
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