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

相关推荐

  • Linux基础知识总结

    Linux基础知识 计算机系统 计算机硬件组成 1.控制器:计算机系统的控制中心,协调各部分工作,保证计算机按照预先规定的目标和步骤进行操作及处理。 2.运算器:对数据进行算数运算,逻辑判断以及数据的比较、移位等操作。 3.存储器:存取程序和各种数据信息。  4.输入设备:把信息,如数字、文字、图像等转换为数字形式的“编码”的设备(键盘,扫描仪) …

    2017-05-18
  • 正则表达式 小结

    听老师和学姐都说,正则表达式很重要,所以这次我总结一下,同时加强一下记忆。 目前我们学的正则表达式有:字符匹配;匹配字数;位置锚定。 :. 匹配任意单个字符 [] 匹配指定范围内的任意单个字符 [^] 匹配指定范围外的任意单个字符 [:alnum:] 或 [0-9a-zA-Z] [:alpha:] 或 [a-zA-Z]…

    2017-07-31
  • 网络的冰山一角

        这周我们学习了网络管理,每一天进度特别快,上课认真听了,但是感觉也只能听懂一半。所以我决定把网络管理作为这周博客写一写,这样相当于又复习了一边,能加深印象。 一、用户应用程序对网络的影响     1、批处理应用程序:无需直接人工交互,宽带很重要,但是并非关键性因素。 &n…

    2017-09-04
  • Linux开学一周的学习心得

    Linux,这个名字第一次听到是通过张超老师给我讲解,因为我在学校学的是金融数学,平时对这方面没有太多接触。当时对Linux就知道是个系统,随后在网上搜了搜,了解也不太多。 直到今天已经来马哥教育一星期了,刚入学的这一星期上课,都是一些基本的命令,感觉学着还蛮有意思,教学的安排也非常合理,我们大家学一天还能自己动手操作一天,既能专心听课,又能把学到的知识巩固…

    2017-07-15
  • 第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 2、编辑/etc/group文件,添加组hadoop。 3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。 4、复制/etc/sk…

    Linux干货 2017-02-07
  • 制作引导分区

      使用虚拟机制作一个可以引导启动的简单系统。方法如下:   一、制作两个分区     1、添加一块新的硬盘,新建两个分区,格式化并挂载到/mnt/boot和/mnt/sysroot目录中;虚拟机添加硬盘的操作很简单就不做演示了,要注意的是添加的硬盘最好选择成“将虚拟磁盘存储为单个个文件”,并为将文件名修改为容易识别的…

    Linux干货 2016-01-18

评论列表(1条)

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

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