我想要检查软件清单中的软件是否已安装。如果没有安装,应该显示出来并使脚本中止/退出。如果我执行该脚本,则输出应如下所示:
wget is not installed
telnet is not installed
目前看起来是这样的:
wget is not installed
再次执行脚本...
telnet is not installed
目前的脚本正在检查安装的软件,并在当前检查的软件未安装时终止/退出。这不太好,因为您必须运行脚本多次才能确定并检查每个软件是否已安装:
LINUX_DISTRIBUTATION=$(grep -Eo "(Debian|Ubuntu|RedHat|CentOS)" /etc/issue)
# Debian / Ubuntu
if [ -f /etc/debian_version ] || [ "$LINUX_DISTRIBUTATION" == "Debian" ] || [ "$LINUX_DISTRIBUTATION" == "Ubuntu" ]; then
declare -a NEEDED_SOFTWARE_LIST=(bash rsync wget grep telnet sed)
for SOFTWARE in ${NEEDED_SOFTWARE_LIST[@]}; do
dpkg -l | grep -i $SOFTWARE | head -1 | if [[ "$(cut -d ' ' -f 1)" != "ii" ]]; then
echo -e "[ ${Red}FAILED ${RCol}]\t$SOFTWARE is NOT installed completely! Please install it...\n";
exit 1;
fi
done
# RedHat / CentOS
elif [ -f /etc/redhat-release ] || [ "$LINUX_DISTRIBUTATION" == "RedHat" ] || [ "$LINUX_DISTRIBUTATION" == "CentOS" ]; then
declare -a NEEDED_SOFTWARE_LIST=(bash rsync wget grep telnet sed)
for SOFTWARE in ${NEEDED_SOFTWARE_LIST[@]}; do
if [[ "$(rpm -q $SOFTWARE)" == "package $SOFTWARE is not installed" ]]; then
echo -e "[ ${Red}FAILED ${RCol}]\t$SOFTWARE is NOT installed completely! Please install it...\n";
exit 1;
fi
done
else
echo "[ ${Red}FAILED ${RCol}]\tYour system is currently not supported by this script.";
exit 1;
fi
我认为我的解决方案不是最好的。有人能调整它吗?提前谢谢!:)
提示:我声明变量“NEEDED_SOFTWARE_LIST”两次,因为我认为我将需要两个软件列表数组,因为某些发行版需要其他软件包。