我目前正在开展一个项目,需要更新多个未连接到互联网的系统。每个 rpm 软件包我都必须在每个系统上手动下载并安装/升级软件包。
我正在尝试制作一个脚本来检查是否安装了旧版本的软件包以及是否要执行升级。否则,继续下一个包(我只是升级包,而不是安装新包。)
这是我目前拥有的。该脚本引用一个包含所有包列表的文件。我没有每个包的包名称,但我有 rpm,所以我很好奇如何在 if 语句中进行正确的比较,以使脚本在 true 时执行其他操作。
工作解决方案:
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
最佳答案
当您有机会时,请向我们展示您的输入示例。
我查看了您的程序并提供了此重写:
IFS="="
while read -r patchName patchrpm
do
RPM=${patchrpm//\"/}
if
! rpm -qi $RPM
then
echo "Package $RPM is not installed, moving on to next package."
else
rpm -Uvh $RPM
fi
done < patches.conf >> patching_log.conf
下面是同一个程序,其中包含行号,以防您需要询问具体问题:
1 IFS="="
2 while read -r patchName patchrpm
3 do
4 RPM=${patchnum//\"/}
5 if
6 ! rpm -qi $RPM
7 then
8 echo "Package $RPM is not installed, moving on to next package."
9 else
10 rpm -Uvh $RPM
11 fi
12 done < patches.conf >> patching_log.conf
关于linux - Bash 脚本 - 如何检查软件包是否已安装并根据终端结果执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60046177/