linux - Bash 脚本 - 如何检查软件包是否已安装并根据终端结果执行操作

标签 linux bash redhat rpm

我目前正在开展一个项目,需要更新多个未连接到互联网的系统。每个 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/

相关文章:

bash - Anaconda 在 Red Hat 7.7 系统上安装失败

linux - 列出最近 5 个隐藏目录的内容

java - 在 Linux 上的 Java EE 应用程序中调用 dll 文件

hadoop - 使用安全策略在 RHEL 机器上设置 Hadoop

linux - yum install 无法在没有 root 权限的集群上运行

linux - 线程退出但仍保持互斥

linux - 如何在 apt-get url 中仅显示 "package_name.deb"?

c - 如何获取OPENSSL中MACRO生成的函数的地址

arrays - Perl - 如何从分隔的 txt 文件中读取每一行并处理它

linux - grep:如何将匹配捕获到变量中?