shell编程、yum的使用

shell编程、yum的使用

一、shell编程

1while的特殊使用

while 循环的特殊用法(遍历文件的每一行):

while read line; do

     循环体

done < /PATH/FROM/SOMEFILE

  依次读取/PATH/FROM/SOMEFILE 文件中的每一行,且将

行赋值给变量line

2、for的特殊使用

双小括号方法,即(()) 格式,也可以用于算术运算

双小括号方法也可以使bash Shell 实现C 语言风格的变量操作

  #I=10

  #((I++))

for 循环的特殊格式:

for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式))

do

     循环体

done

  控制变量初始化:仅在运行到循环代码段时执行一次

  控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断。

3、select的使用

*语句格式:select variable in list

     do

         循环体命令

     done

*select  循环主要用于创建菜单,按数字顺序排列的

示 菜单项将显示在标准错误上,并显示 PS3  提示符,

等待用户输入。

*用户输入菜单列表中的某个数字,执行相应的命令

*用户输入被保存在内置变量 REPLY

*case的结合使用

   select 用 是个无限循环,因此要记住用 break  命令退

用 出循环,或用 exit 按 命令终止脚本。也可以按 ctrl+c

退出循环。

   select 和 经常和 case  联合使用

   与 for 略 循环类似,可以省略 in list,此时使用位置

参量

4、函数的使用

1)函数介绍

    函数function 是由若干条shell 命令组成的语句块,实现代码重用和模块化编程。

  它与shell 程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell 程序的一部分。

函数和shell 程序比较相似,区别在于:

  Shell 程序在子Shell 中运行

  而Shell 函数在当前Shell 中运行。因此在当前Shell 中,函数可对shell中变量进行修改。

(2)函数的使用

    函数的定义和使用:

可在交互式环境下定义函数

可将函数放在脚本文件中作为它的一部分

可放在只包含函数的单独文件中

  调用:函数只有被调用才会执行;

调用:给定函数名

函数名出现的地方,会被自动替换为函数代码

函数的生命周期:被调用时创建,返回时终止

函数在使用前必须定义,因此应将函数定义放在脚本开始部分,直至

shell 首次发现它后才能使用

  调用函数仅使用其函数名即可。

  示例:

$cat func1

#!/bin/bash

# func1

hello()

{

echo "Hello there today's date is `date +%F`"

}

echo "now going to the function hello"

hello

echo "back from the function"

3)函数文件的调用

可以将经常使用的函数存入函数文件,然后将函

数文件载入shell。 。

  文件名可任意选取,但最好与相关任务有某种联

系。例如:functions.main

  一旦函数文件载入shell ,就可以在命令行或脚本

中调用函数。可以使用set 命令查看所有定义的函

数,其输出列表包括已经载入shell 的所有函数。

 若要改动函数,首先用unset 命令从shell 中删除

函数。改动完毕后,再重新载入此文件。

*函数载入

  函数文件已创建好后,要将它载入shell

  定位 函数文件 并载入shell 的格式:

.  filename 或 或 source filename

  注意:此即< > < 空格> < 文件名>

这里 的文件名要带正确路径

  示例:上例中 的 函数,可使用 如下命令:

$ . functions.main

*函数执行

执行shell 函数

  要执行函数,简单地键入函数名即可 :

  示例:

$findit groups

/usr/bin/groups

/usr/local/backups/groups.bak

*函数删除

    删除shell 函数

    现在对函数做一些改动。首先删除函数,使其对shell   不可用

    使用unset 命令完成此 功能.

  命令 格式为:

  unset function_name

  实例:

    $unset findit

再键入set 命令,函数将不再显示。

*函数参数的接收

   传递参数给函数:调用函数时,在函数名后面以空白分隔。

   给定参数列表即可;例如“testfunc arg1 arg2 …

   在函数体中当中,可使用$1, $2, … 调用这些参数;还

   可以使用$@, $*, $#

*函数的作用范围

    变量作用域:

    环境变量:当前shell 和子shell 有效

    本地变量:只在当前shell 进程有效,为执行脚本会启动。

    专用子shell 进程;因此,本地变量的作用范围是当前shell 脚本程序文件,包括脚本中的函数。

    局部变量:函数的生命周期;函数结束时变量被自动销毁。

   注意:如果 函数中有局部变量,如果其名称同本地变量, 使用局部变量。

   在函数中定义局部变量的方法

local NAME=VALUE

5、函数的递归表示

   函数间接或直接调用自身,这就是函数的递归使用。

 示例:  示: 例: fact.sh

#!/bin/bash

#

fact() {

if [ $1 -eq 0 -o $1 -eq 1 ]; then

echo 1

else

echo $[$1*$(fact $[$1-1])]

fi

}

fact $1.

函数使用练习

1、写一个函数实现两个数字做为参数,返回最大值

图片1.png 

然后source maxnumber.fun

max 3 5

即可得出结果

2、写一个函数实现数字的加减乘除运算,例如输入 1 + 2将得出正确结果

图片2.png 

图片3.png 

经过简单的调用便可使用。

二、yum的使用

   大家都知道当我们去安装一个程序包时,这个包可能依赖许多别的包,只有当别的包安装后,这个包才可以正常使用。我们如果去为了安装某个包,再去一个一个安装其相依赖的包,会特别麻烦,所以我们的yum工具,可以很好地解决这个问题。帮助我们快速地解决这个问题。下面首先来介绍一下rpm的使用。

1rpm 包管理

 CentOS 系统上使用rpm 命令管理程序包:

安装、卸载、升级、查询、校验、数据库维护

安装:

rpm {-i|–install} [install-options] PACKAGE_FILE

   -v: verbose

   -vv:

   -h:  # 显示程序包管理执行进度

   rpm -ivh PACKAGE_FILE …

 [install-options]选项

    –test:  测试安装,但不真正执行安装;dry run 模式

    –nodeps :忽略依赖关系

    –replacepkgs | replacefiles

–nosignature:  不检查来源合法性

–nodigest :不检查包完整性

–noscipts :不执行程序包脚本片断

%pre: ; 安装前脚本; –nopre

%post: ; 安装后脚本; –nopost

%preun: ; 卸载前脚本; –nopreun

%postun:  卸载后脚本; –nopostun

2rpm 包升级

  升级:

  rpm {-U|–upgrade} [install-options]  PACKAGE_FILE …

  rpm {-F|–freshen} [install-options]  PACKAGE_FILE …

upgrade :安装有旧版程序包,则“升级”

如果不存在旧版程序包,则“安装”

freshen :安装有旧版程序包,则“升级”

如果不存在旧版程序包,则不执行升级操作

rpm -Uvh PACKAGE_FILE …

rpm -Fvh PACKAGE_FILE …

–oldpackage :降级

–force: 强行升级

3、包查询

  rpm {-q|–query} [select-options] [query-options]

  [select-options]

-a:  所有包

-f:  查看指定的文件由哪个程序包安装生成

-p rpmfile :针对尚未安装的程序包文件做查询操作;

–whatprovides CAPABILITY :查询指定的 CAPABILITY

由哪个包所提供

–whatrequires CAPABILITY :查询指定的 CAPABILITY

哪个包所依赖

v rpm2cpio  包文件|cpio itv 预览包内文件

v rpm2cpio  包文件|cpio id *.conf” ”

举例定向解压需要的文件,命令为:rpm2cpio tree-1.5.3-3.el6.x86_64.rpm  |cpio -idv ./usr/bin/tree

 [query-options]

–changelog :查询rpm 包的changelog

-c:  查询程序的配置文件

-d:  查询程序的文档

-i: information

-l:  查看指定的程序包安装后生成的所有文件;

–scripts :程序包自带的脚本片断

-R:  查询指定的程序包所依赖的CAPABILITY; ;

–provides:  列出指定程序包所提供的CAPABILITY

查询用法:

-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql

PACKAGE, -qd PACKAGE

-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …

-qa

3rpm卸载与检验

rpm {-e|–erase} [–allmatches] [–nodeps] [–

noscripts] [–notriggers] [–test] PACKAGE_NAME …

rpm {-V|–verify} [select-options] [verify-options]

S file Size differs

M Mode differs (includes permissions and file type)

5 digest (formerly MD5 sum) differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs

P capabilities differ

导入所需要公钥:

rpm -K|checksig rpmfile 检查包的完整性和签名

rpm –import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

CentOS 7 发行版光盘提供: RPM-GPG-KEY-CentOS-7

rpm -qa gpg-pubkey*

4、数据库重建:

/var/lib/rpm

v rpm {–initdb|–rebuilddb}

initdb:  初始化

如果事先不存在数据库,则新建之

否则,不执行任何操作

rebuilddb :重建

无论当前存在与否,直接重新创建数据库

5yum 配置文件

yum 客户端配置文件:

/etc/yum.conf :为所有仓库提供公共配置

/etc/yum.repos.d/*.repo :为仓库的指向提供配置

仓库指向的定义:

[repositoryID]

name=Some name for this repository

baseurl=url://path/to/repository/

enabled={1|0}

gpgcheck={1|0}

gpgkey=URL

enablegroups={1|0}

failovermethod={roundrobin|priority}

默认为:roundrobin ,意为随机挑选;

cost= 默认为1000

    练习:tree的一个文件如/usr/bin/tree被误删除,如何恢复tree的功能。

(1)将光盘中的tree的安装包的特定文件安装即可

(2)预览:rpm2cpio tree-1.5.3-3.el6.x86_64.rpm  |cpio -itv

图片4.png 

                    课后练习

这两个习题较难,没有做出来,等老师讲解了我再将答案写出来。

1、斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0112358132134、……,斐波纳契数列以如下被以递归的方法定义:F0=0F1=1Fn=F(n-1)+F(n-2)n2

写一个函数,求n阶斐波那契数列

 

2、汉诺塔(又称河内塔)问题是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

利用函数,实现N片盘的汉诺塔的移动步骤

 

 

原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/37946

(0)
上一篇 2016-08-21 20:46
下一篇 2016-08-21 20:46

相关推荐

  • 批量部署lxc虚拟机

    前言:lxc是一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的命名空间和共用API来分配不同软件容器的可用硬件资源,创造出应用程…

    Linux干货 2016-03-20
  • 推荐-HA专题: 编译安装并配置DRBD

    HA专题: 编译安装并配置DRBD 前言 实验环境 DRBD介绍 安装前准备工作 获取并编译安装DRBD 配置DRBD 分区 配置文件 启动并设置DRBD 格式化并挂载 验证冗余性 总结 前言 上篇我们讲到使用corosync+pacemaker实现MySQL高可用, 但是NFS容易成为单点故障从而导致数据丢失等严重问题, 我们可以使用drbd来实现MySQ…

    Linux干货 2016-04-12
  • Python 课堂笔记

    第二天

    Linux干货 2018-03-21
  • xen虚拟化基础篇

    Xen介绍:  xen是一个开放的源代码虚拟机监视器,有剑桥大学研发。它打算在单个计算机上运行多达128个满足特征的操作系统,操作系统必须进行显示地修改("移植")以在Xen上运行(但是提供对用户应用的兼容性)。这使得无需特殊硬件支持,就能达到高性能的虚拟化。 Xen由三部分组成:     第一部分…

    Linux干货 2015-08-26
  • ansible之Playbook中tags使用

    示例:httpd.yml– hosts: websrvsremote_user: roottasks:– name: Install httpdyum: name=httpd state=present – name: Install configure filecopy: src=files/httpd.conf des…

    Linux干货 2018-01-14
  • 自动化运维工具Puppet

        开发puppet模块,nginx负载均衡并反代动态请求至httpd,httpd用ajp连接器将反代请求至tomcat,并部署tomcat-session-memcached 架构图为 在master主机上开发的模块为: 1、chrony模块; ├── chrony│   ├── files│…

    2017-07-28

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-21 22:31

    文章对脚本循环语句的语法总结的好,同时rpm管理工具与yum仓库的配置是基本技能需要熟练掌握,课后练习不会不要等别人要养成自主学习的习惯,不会可以询问其他人,或者goole,百度,都能找到答案。学习是自己的事哦。