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)
178babyhanggege178babyhanggege
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • N25 – 第一周博客作业

      1. 描述计算机的组成及其功能2. 按系列罗列Linux的发行版,并描述不同发行版之间的联系和区别3. 描述Linux的哲学思想,并按照自己的理解对其进行解释性描述4. 说明Linux系统上命令的使用格式;详细介绍ifconfig,echo,tty,startx,export,pwd,history,sh…

    Linux干货 2016-11-28
  • 第一周作业

    1、描述计算机的组成及其功能。     运算器,控制器,存储器,输入设备,输出设备     CPU:运算器+控制器     内存,硬盘:存储器     输入设备:键盘鼠标   &n…

    Linux干货 2016-06-26
  • SSH端口转发

      SSH 会自动加密和解密所有SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他TCP 端口的网络数据通过SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为SSH 为其他TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些TCP 应用均能够…

    2017-09-10
  • 关于tar命令的一些方法

    tar 解压缩文件时只有当文件格式中有tar才能使用,否则使用其他单独的特定解压缩工具,例如uncompress,gzip ,bzip2.xz等等 tar压缩解压缩命令详解 tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命…

    Linux干货 2016-08-29
  • 创建及管理KVM工具之virsh

    一、什么是虚拟化 虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。 二、虚拟化能做什么 CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 三、虚拟化…

    Linux干货 2017-01-19
  • 计划任务和周期性任务

    linux计划任务     功能:指定未来的某以特定的时间点执行一次任务     命令:at、bathc     at命令:         选项: &nbsp…

    Linux干货 2016-09-12

评论列表(1条)

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

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