本文所选的例子来自于《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. Nuxt使用高德地图

    事先准备 注册账号并申请Key 1. 首先,注册开发者账号,成为高德开放平台开发者 2. 登陆之后,在进入「应用管理」 页面「创建新应用」 3. 为应用添加 Key,「服务平台」一项请选择「 Web ...

  2. Ubuntu系统vi编辑器上下左右键变ABCD的解决方法(转)

    首先卸载旧版本的vi编辑器: $sudo apt-get remove vim-common 然后安装新版vi即可: $sudo apt-get install vim Ubuntu自带有几种版本的v ...

  3. STL之空间配置器

    在前面很多随笔里都有提到new对象是先分配内存然后初始化对象,主要是对operator new和placement new的使用 在SGI STL中内存的分配和初始化是分开的,分配内存是使用类模板,模 ...

  4. GPS坐标(WGS84)转换百度坐标(BD09) python测试

    基础知识坐标系说明: WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系. GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统.由WGS84坐标系经加密后的坐标 ...

  5. root用户无法修改文件权限(lsattr/chattr: i 和 a 属性含义)

    今天想在实验室分配的服务器上添加一个普通用户, 所以用root身份登录服务器后执行useradd命令,却提示无法读写 /etc/shadow文件; ls -l /etc/shadow发现什么权限都没有 ...

  6. Loadrunner之脚本篇——事务函数

    1.事务的开始和结束名称需要相同 lr_start_transaction(“transaction_name”); …//事务处理 lr_end_transaction(“transaction_n ...

  7. linux 快速清空文件内容

    Tomcat 的catelina.out 如果不配置按照日期产生会在一个文件中产生大量的输出日志. 清除日志如果直接删除catelina.out将无法输出日志.如果想输出日志只能重启Tomcat才会产 ...

  8. Linux Shell编程 条件判断语法

    if条件判断语句 单分支 if 条件语句 语法格式: if [条件判断式];then 程序 fi 或者 if [条件判断式] then 程序 fi 在使用单分支 if 条件查询时需要注意几点: if ...

  9. python中的值传递和引用传递

    Python中的变量是没有类型的,我们可以把它看做一个(*void)类型的指针,变量是可以指向任何对象的,而对象才是有类型的. Python中的对象有可变对象(number,string,tuple等 ...

  10. 20145231《Java程序设计》第三次实验报告

    实验三 敏捷开发与XP实现 实验内容 XP基础 XP核心实践 相关工具 实验要求 了解敏捷开发的基本方法以及XP软件开发的相关准则:了解代码编写的标准和原则:体会结对编程的好处: 实践体会版本控制的方 ...