前端之家收集整理的这篇文章主要介绍了
查询rpm包信息、文件列表和运行的依赖包,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
301_0@
目的:
@H_
301_0@
1 查询rpm包是否可以被安装
@H_
301_0@
2 查询rpm包信息说明
@H_
301_0@
3 查询rpm包包含的
文件列表
@H_
301_0@
3 查询rpm包依赖的
rpm包名
@H_
301_0@
@H_
301_0@
准备:
@H_
301_0@
把路径/var/cache/yum/下子目录中存在以sqlite为后缀的文件复制到脚本实现的同一目录下,并改名为CentOS6.0_package_db.sqlite。
@H_
301_0@
实现:
@H_
301_0@
【脚本】
@H_
301_0@
#!/bin/bash
SUCCESS=0
E_NOARGS=65
if [ -z "$1" ]
then
echo "Usage: `basename $0` rpm-file"
exit $E_NOARGS
fi
{
rpm -i --test $1 # 查询 rpm 包是否可以被安装
if [ "$?" -eq $SUCCESS ]
then
echo "$1 can be installed."
fi
echo
echo "Archive Description:"
rpm -qpi $1 # 查询说明
echo
echo "Archive Listing:"
rpm -qpl $1 # 查询列表
echo
echo "Requires Packages:"
rpm -qpR $1|while read line
do
requirename=${line%%(*}
{
echo "select packages.name from packages inner join provides
on packages.pkgKey = provides.pkgKey where provides.name = '$requirename';" |
sqlite3 CentOS6.0_package_db.sqlite
} #splite3为查询数据库的命令
done|uniq #uniq删除其中重复的行
} > "$1-query" # 把代码块中的所有输出都重定向到文件中
cat "$1-query"
echo
echo "Results of rpm check in file $1-query"
@H_
301_0@
@H_
301_0@
脚本shell命令解析:
@H_
301_0@
@H_
301_0@
字符串比较运算符(请注意引号的使用,这是防止空格扰乱代码的好方法)
@H_
301_0@
[-z string] 如果
string长度为零,则为真
@H_
301_0@
@H_
301_0@
位置参数$1,$2,...,$N,$#代表了命令行的参数数量,$0代表了脚本的名字,第一个参数代表$1,第二个参数代表$2,以此类推,参数数量的总数存在$#中。
@H_
301_0@
@H_
301_0@
$?(
显示最后命令的退出状态,0表示没有错误,其他值表面有错误)
@H_
301_0@
@H_
301_0@
子串削除
@H_
301_0@
${string#substring}
@H_
301_0@
从
$string 的左边截掉第一个匹配的
$substring
@H_
301_0@
${string##substring}
@H_
301_0@
从
$string 的左边截掉最后一个个匹配的
$substring
@H_
301_0@
${string%substring}
@H_
301_0@
从
$string 的右边截掉第一个匹配的
$substring
@H_
301_0@
${string%%substring}
@H_
301_0@
从
$string 的右边截掉最后一个匹配的
$substring
@H_
301_0@
@H_
301_0@
${line%%(*} 削除‘
(’和后面的所有字符
原文链接:https://www.f2er.com/javaschema/286689.html