本文所选的例子来自于《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包的更多相关文章

  1. advanced bash shell guide读书笔记

    http://note.youdao.com/noteshare?id=fc23a679849b4627d131d3ef07c74a71

  2. [转帖]Linux学习笔记之rpm包管理功能全解

    Linux学习笔记之rpm包管理功能全解 https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 ...

  3. 【MySQL】MySQL无基础学习和入门之二:MySQL的安装

    安装MySQL安装一般分为源码包编译安装.分发包.rpm包安装和yum安装,四种安装方式有一些区别,对应的适用场景也不一样. 源码包:源码包就是程序源代码包,其中包含程序代码文件,这些代码文件是文本型 ...

  4. Linux学习笔记之rpm包管理功能全解

    0x00 软件包管理器 所有的软件都是由文件格式的程序代码(即源代码),经过编译成为一个可执行二进制文件:对于一个软件来说,其包含二进制程序.库文件.配置文件以及帮助文件.在应用中,每次要安装程序时通 ...

  5. Linux学习—rpm包管理

    前言 在linux上,一个软件通常由二进制程序,库文件,配置文件和帮助文件组成.其中: 二进制程序一般都放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin和/ ...

  6. salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面

    上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以 ...

  7. 学习ASP.NET Core Razor 编程系列七——修改列表页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  9. 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 ...

随机推荐

  1. 常用模块一(random模块、time模块、sys模块)

    一.random模块 import random # 1 取随机小数 应用:数学计算 ret = random.random() # 大于0且小于1之间的小数 print(ret) # 0.53559 ...

  2. Apache JServ Protocol (AJP)

    The Apache JServ Protocol (AJP) is a binary protocol that can proxy inbound requests from a web serv ...

  3. make编译四

    书写命令 每条规则中的命令和操作系统 Shell 的命令行是一致的. make 会按顺序一条一条的执行命令, 每条命令的开头必须以[Tab]键开头, 除非,命令是紧跟在依赖规则后面的分号后的.在命令行 ...

  4. A Simple Web Server

    介绍 在过去20几年里,网络已经在各个方面改变了我们的生活,但是它的核心却几乎没有什么改变.多数的系统依然遵循着Tim Berners-Lee在上个世纪发布的规则.大多数的web服务器都在用同样的方式 ...

  5. 免费 SSL 安全证书

    为了保证网上传输信息的安全而在自己的 Linode VPS 上部署 SSL 加密服务.商业 CA 较贵,所以使用了自己签发的 CA.网友神爱的留言提到了 StartSSL 的免费 CA,稍做了一些调查 ...

  6. HBA卡 和 RAID卡

    HBA卡: 只从HBA的英文解释HOST BUS ADAPTER(主机总线适配器)就能看出来,他肯定是给主机用的,一般HBA就是给主机插上后,给主机扩展出更多的接口,来连接外部的设备.大多数讲到HBA ...

  7. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

  8. jQuery:自学笔记(1)——基础入门

    jQuery:自学笔记(1)——基础入门 认识JQuery 1.jQuery概述 jQuery是一个快速.小巧 .功能丰富的JavaScript函数库.它可以实现“写的少,做的多”的目标. jQuer ...

  9. yii常用操作函数

    <?php defined('YII_DEBUG') or define('YII_DEBUG', true); //当在调试模式下,应用会保留更多日志信息,如果抛出异常,会显示详细的错误调用堆 ...

  10. 【HackerRank】Encryption

    One classic method for composing secret messages is called a square code.  The spaces are removed fr ...