我目前正在做一个项目,我需要更新几个没有连接到互联网的系统,每个rpm包我都必须手动下载和安装/升级每个系统上的包。
我正在尝试编写一个脚本来检查是否安装了旧版本的软件包,以及是否要执行升级。否则,请转到下一个软件包(我只升级软件包,不安装新软件包)。
下面是我现在的代码:脚本引用了一个包含所有包的列表的文件,我没有每个包的包名,但是我有rpm,所以我很好奇如何在if语句中做一个正确的比较,如果为真,让脚本执行另一个操作。
工作溶液:
IFS="="
while read -r name value
do
if [[ $(rpm -qi ${name//\"/}) == "package ${name//\"/} is not installed" ]]
then
echo "Package ${name//\"/} is not installed, moving on..."
else
if [[ "${value//\"/}" == *"kernel"* ]]
then
rpm -ivh ${value//\"/}
else
rpm -Uvh ${value//\"/}
fi
fi
echo 'Done!'
done < patches.conf >> patching_log.conf
先谢谢你!
输入:
RHSA-2019:3979(kernel-tools-debuginfo)=kernel-tools-debuginfo-3.10.0-1062.7.1.el7.x86_64.rpm
RHSA-2019:3979(kernel-tools-libs)=kernel-tools-libs-3.10.0-1062.7.1.el7.x86_64.rpm
RHSA-2019:3979(perf)=perf-3.10.0-1062.7.1.el7.x86_64.rpm
RHSA-2019:3979(perf-debuginfo)=perf-debuginfo-3.10.0-1062.7.1.el7.x86_64.rpm
RHSA-2019:3979(python-perf)=python-perf-3.10.0-1062.7.1.el7.x86_64.rpm
RHSA-2019:3979(python-perf-debuginfo)=python-perf-debuginfo-3.10.0-1062.7.1.el7.x86_64.rpm
RHSA-2019:4024(SDL-32)=SDL-1.2.15-15.el7_7.i686.rpm
RHSA-2019:4024(SDL-64)=SDL-1.2.15-15.el7_7.x86_64.rpm
3条答案
按热度按时间34gzjxbg1#
如果您有机会,请向我们展示您的输入示例。
我看了你的程序,我提供了这个重写:
下面是同样的程序,上面有行号,以防您需要问特定的问题:
g9icjywg2#
为什么不阅读
rpm
的手册并使用命令,而不是添加大量的逻辑:如果已安装,此操作将对其进行更新,如果未安装,则继续。
对于内核,您需要安装,而不是更新,因此部分逻辑应该仍然存在
sg3maiej3#
实际上,您可以使用dpkg简单地执行此操作
这将返回;
如果请求的查询成功执行,则返回0。
1由于找不到文件或包,请求的查询完全或部分失败
2由于无效的命令行使用或与系统的交互(如访问数据库、内存分配等)而导致的致命或不可恢复的错误。