查询rpm包信息、文件列表和运行的依赖包
目的: 1 查询rpm包是否可以被安装 2 查询rpm包信息说明 3 查询rpm包包含的文件列表 3 查询rpm包依赖的rpm包名
准备: 把路径/var/cache/yum/下子目录中存在以sqlite为后缀的文件复制到脚本实现的同一目录下,并改名为CentOS6.0_package_db.sqlite。 实现: 【脚本】
#!/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"
脚本shell命令解析:
字符串比较运算符(请注意引号的使用,这是防止空格扰乱代码的好方法) [-z string] 如果string长度为零,则为真
位置参数$1,$2,...,$N,$#代表了命令行的参数数量,$0代表了脚本的名字,第一个参数代表$1,第二个参数代表$2,以此类推,参数数量的总数存在$#中。
$?(显示最后命令的退出状态,0表示没有错误,其他值表面有错误)
子串削除 ${string#substring} 从$string 的左边截掉第一个匹配的$substring ${string##substring} 从$string 的左边截掉最后一个个匹配的$substring ${string%substring} 从$string 的右边截掉第一个匹配的$substring ${string%%substring} 从$string 的右边截掉最后一个匹配的$substring
${line%%(*} 削除‘(’和后面的所有字符 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |