특정 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