[英]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.