我试图找出数组中是否存在某些 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
,在 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