《Advanced Bash-scripting Guide》学习(七):描述、列表和确定是否可以安装一个rpm包
本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅
Example 3-2.将一个代码块的结果保存到文件
#!/bin/bash
#rpm-check.sh
#这个脚本的目的是为了描述、列表和确定是否可以安装一个rpm包
#在一个文件中保存输出
#这个脚本使用一个代码块来展示
SUCCESS=0
E_NOARGS=65
if [ -z "$1" ]
then
echo "Usage: `basename $0` rpm-file"
exit $E_NOARGS
fi
{
echo
echo "Archive Description:"
rpm -qpi $1 #查询说明
echo
echo "Archive Listing:"
rpm -qpl $1 #查询列表
echo
rpm -i --test $1 #查询rpm包是否可以被安装
if [ "$?" -eq $SUCCESS ]
then
echo "$1 can be installed."
else
echo "$1 cannot be installed."
fi
echo
} > "$1.test" #把代码中的标准输出重定向到文件中
echo "Results of rpm test in file $1.test"
#查看rpm的man页来查看rpm的选项
exit 0
对于未安装包,要想获得其信息,必须在rpm包所在的目录下。如果光盘/dev/sr0挂载在/mnt/cdrom,那么必须进到/mnt/cdrom/Packages下查询其信息。
那么,问题来了。
1.怎么检查光盘有没有挂载?如果没有,怎么用脚本呢来挂载?
2.当前目录是否是/mnt/cdrom/Packages?如果不是,有没有必要进入这个目录?如果是,试想光盘的挂载点下有没有写权限?
3.所有输出的文件的保存位置?
一个改进的脚本
#!/bin/bash
#这个脚本是为了描述、列表和确定是否可以安装一个rpm包
#在一个文件中保存输出
SUCCESS=0
E_NOARGS=65
pwd=/mnt/cdrom/Packages/
#检查入参是否为空,为空以error退出
if [ -z "$1" ]
then
echo "Usage: `basename $0` rpm-file"
exit $E_NOARGS
fi
#检查光盘是否挂载,如果没挂载,进行挂载
(mount | grep "/dev/sr0") &> /dev/null
if [ "$?" -ne 0 ]
then
mount /dev/sr0 /mnt/cdrom &> /dev/null
fi
#检查目录是否为指定目录
if [ "$PWD" != "$pwd" ]
then
X=$pwd$1
else
X=$1
fi
#这是一个代码块,用来描述、列表和确定是否可以安装一个rpm包(测试安装过程,实际并不安装)
{
echo
echo "Archive Description:"
rpm -qpi $X #查询未安装包的说明
echo
echo "Archive Listing:"
rpm -qpl $X #查询未安装包的列表,即文件安装位置
echo
rpm -i --test $X #查询rpm包是否可以被安装
if [ "$?" -eq $SUCCESS ]
then
echo "$1 can be installed."
else
echo "$1 cannot be installed."
fi
echo
} &> /root/sh/$1.test
#把代码段中所有输出(包括标准输出和错误输出)都重定向到文件中
echo "Results of rpm test in file $1.test"
exit 0
脚本运行结果
《Advanced Bash-scripting Guide》学习(七):描述、列表和确定是否可以安装一个rpm包的更多相关文章
- advanced bash shell guide读书笔记
http://note.youdao.com/noteshare?id=fc23a679849b4627d131d3ef07c74a71
- [转帖]Linux学习笔记之rpm包管理功能全解
Linux学习笔记之rpm包管理功能全解 https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 ...
- 【MySQL】MySQL无基础学习和入门之二:MySQL的安装
安装MySQL安装一般分为源码包编译安装.分发包.rpm包安装和yum安装,四种安装方式有一些区别,对应的适用场景也不一样. 源码包:源码包就是程序源代码包,其中包含程序代码文件,这些代码文件是文本型 ...
- Linux学习笔记之rpm包管理功能全解
0x00 软件包管理器 所有的软件都是由文件格式的程序代码(即源代码),经过编译成为一个可执行二进制文件:对于一个软件来说,其包含二进制程序.库文件.配置文件以及帮助文件.在应用中,每次要安装程序时通 ...
- Linux学习—rpm包管理
前言 在linux上,一个软件通常由二进制程序,库文件,配置文件和帮助文件组成.其中: 二进制程序一般都放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin和/ ...
- salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面
上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以 ...
- 学习ASP.NET Core Razor 编程系列七——修改列表页面
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- advanced dom scripting dynamic web design techniques Part One DOM SCRIPTING IN DETAIL CHAPTER 1 DO IT RIGHT WITH BEST PRACTICES
You’re excited; your client is excited. All is well. You’ve just launched the client’s latest websit ...
随机推荐
- 常用模块一(random模块、time模块、sys模块)
一.random模块 import random # 1 取随机小数 应用:数学计算 ret = random.random() # 大于0且小于1之间的小数 print(ret) # 0.53559 ...
- Apache JServ Protocol (AJP)
The Apache JServ Protocol (AJP) is a binary protocol that can proxy inbound requests from a web serv ...
- make编译四
书写命令 每条规则中的命令和操作系统 Shell 的命令行是一致的. make 会按顺序一条一条的执行命令, 每条命令的开头必须以[Tab]键开头, 除非,命令是紧跟在依赖规则后面的分号后的.在命令行 ...
- A Simple Web Server
介绍 在过去20几年里,网络已经在各个方面改变了我们的生活,但是它的核心却几乎没有什么改变.多数的系统依然遵循着Tim Berners-Lee在上个世纪发布的规则.大多数的web服务器都在用同样的方式 ...
- 免费 SSL 安全证书
为了保证网上传输信息的安全而在自己的 Linode VPS 上部署 SSL 加密服务.商业 CA 较贵,所以使用了自己签发的 CA.网友神爱的留言提到了 StartSSL 的免费 CA,稍做了一些调查 ...
- HBA卡 和 RAID卡
HBA卡: 只从HBA的英文解释HOST BUS ADAPTER(主机总线适配器)就能看出来,他肯定是给主机用的,一般HBA就是给主机插上后,给主机扩展出更多的接口,来连接外部的设备.大多数讲到HBA ...
- Android:日常学习笔记(6)——探究活动(3)
Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...
- jQuery:自学笔记(1)——基础入门
jQuery:自学笔记(1)——基础入门 认识JQuery 1.jQuery概述 jQuery是一个快速.小巧 .功能丰富的JavaScript函数库.它可以实现“写的少,做的多”的目标. jQuer ...
- yii常用操作函数
<?php defined('YII_DEBUG') or define('YII_DEBUG', true); //当在调试模式下,应用会保留更多日志信息,如果抛出异常,会显示详细的错误调用堆 ...
- 【HackerRank】Encryption
One classic method for composing secret messages is called a square code. The spaces are removed fr ...