簡體   English   中英

Bash 腳本 - 如何檢查是否安裝了 package 並根據終端結果執行操作

[英]Bash Script - How to check if a package is installed and perform action based on terminal results

我目前正在從事一個項目,我需要更新幾個未連接到 inte.net 的系統。 每個 rpm package 我必須手動下載並安裝/升級每個系統上的軟件包。

我正在嘗試制作一個腳本來檢查是否安裝了舊版本的 package 以及是否要執行升級。 否則,繼續下一個 package(我只是升級 package,不安裝新包。)

這是我目前擁有的。 該腳本引用一個包含所有包列表的文件。 我沒有每個 package 的 package 名稱,但我有 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

如果有機會,請向我們展示您的輸入示例。
我看過你的程序,我提供了這個重寫:

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

為什么不閱讀rpm手冊並使用命令而不是添加大量邏輯:

rpm -F package_name

如果已安裝,這將更新它,如果未安裝,則繼續。

對於 kernel,您需要進行安裝,而不是更新,因此部分邏輯應該仍然存在

實際上你可以簡單地使用 dpkg 來做到這一點

dpkg-query -f='${Status:Want}\n\r' \-W Package

這將返回;

如果成功執行了請求的查詢,則為 0。

1 由於找不到文件或 package,請求的查詢全部或部分失敗

2 由於無效的命令行使用或與系統的交互,例如訪問數據庫、memory 分配等,導致致命或不可恢復的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM