yum client
),而我们管理程序包所使用的命令为yum
命令。而服务器端并不是yum服务器端,但我们可以称之为yum的仓库端(yum repository
),yum的仓库端需要提供一种文件共享服务,将其yum仓库的程序包让客户端能够访问到,这其中在C/S架构模型当中经常用到的协无非就是ftp/http/https
,那也就意味着,实际上yum工作时,每一个客户端主机都需要有yum命令,其次还需要提供其配置文件,可提供多个以.repo
结尾放置在/etc/yum.repos.d/
目录下,也是片段性文件。 每一个.repo
结尾的文件就可以定义一个yum的指向,但也可以定义多个,那么我们对于以上的总结及yum的语法格式做出简单赘述:
回顾:yum程序包管理器和编译安装 C/S yum client(yum) yum repository(ftp/http/https) base extras updates repo: [id] name= baseurl=http:// http://
但需要注意的是,对于CentOS任何一个发行版来讲,至少有一个源叫base
源,我们在安装操作系统时,不可能将所有的软件包将其安装,要想安装额外的安装包时,可以将光盘制作成为yum仓库,而那个仓库就是一个base仓库,所以无论是阿里云还是清华镜像等站点,通常在os
目录下就有base源,但除了base源还有extras
和updates
。无论是那个发行版,将光盘作为一个最基本的仓库来安装程序包,剩余则都是补充而已。
yum的各种管理机制就是通过其各种子命令来完成的,我们来简单阐述并加以总结:
子命令: yum的各种管理机制是由各种子命令形成的 list, clean, makecache, grouplist, info, whatprovides install, update, remove, groupinstall, groupupdate, groupremove, groupinfo
以上就是总结的yum程序包的管理,而后我们也讲到过如何用源码包进行安装该程序,而编译安装其实也是一种非常重要的能力,其主要讲的还是C/C++编译上的安装,使用的为大致标准三个步骤,第一个是configure
这是系统编译安装检查脚本,并且编译安装符合条件之后还能结合Makefile.in
,生成makefile
文件,而第二步就是使用make
结合makefile
编译的配置文件来编译执行makefile
,而编译完成之后,无论是二进制还是库文件程序以及配置文件等,都依然准备完成,而后使用make install
复制到在configure指定的安装路径中去,生成相应的文件目录,将文件依次归类存放运用。
编译安装: C/C++: ./confiure --> makefile.in ==> makefile make + makefile ==> binary, library, configfile, manual make install
那么在这一章当中,继续讲解bash脚本的内容。
此前我们也讲过,一个过程式编程语言的执行流程大致分为三类:
过程式编程语言的执行流程: 顺序执行 选择执行 循环执行
回顾我们此前讲到的选择执行,选择执行可以有两种方式来实现,第一种&&
以及||
,这是最常用的两种机制,第二种是if语句,其实还有第三种为case语句。
选择执行: (1) &&, || (2) if语句 (3) case语句
那么if语句其实是有三种格式,我们讲了其中的两种,第一种为单分支的if语句,为真执行该语句,为假则不执行该语句,另一种为双分支的if语句,那么之所以叫选择分支就因为它是布尔型的条件,以此结果就带来要么为真,要么为假,为真时执行该分支,为假时执行另一个该分支,所以叫做选择执行,那么第三种就是多分支的if语句,这种是在当有n种可能时,我们都需要做一下测试,所以当我们的条件不止有真假时,而是有多个选择时,可以满足多个测试时可将其应用。否则,所有的条件都不满足时,我们才能执行无法识别的语句等。那么无论是单分支或双分支以及多分支语句的格式为:
if语句:三种格式 单分支的if语句 if CONDITION; then if-true-分支 fi 双分支的if语句 if CONDITON1; then if-true-分支 else if-false-分支 fi 多分支的if语句 if CONDITION1; then 条件1为真分支 elif CONDITION2; then 条件2为真分支 elif CONDITION3; then 条件3为真分支 ... ... elif CONDITIONn; then 条件n为真分支 else 所有条件均不满足时分支 fi
需要注意的是,多个CONDITION条件如果不互斥的话,多个条件满足也是存在的,但在这里的分支只能是执行其中一个,会执行首先测试为"真"的一个。如果该条件为真时,则后续条件不用测试,如果条件都不为真时,则执行else
分支。
注意:即便多个条件可能同时都能满足,分支只会执行其中一个,首先测试为"真";
练习:让用户通过脚本参数传递一个文件路径给脚本进行判断其类型。
#!/bin/bash # [ -z "$1" ] && echo "Please input filename or directory address" && exit 2 [ $# -lt 1 ] && echo "At lease on path" [ ! -e "$1" ] && echo "No Such File!" && exit 3 if [ -d "$1" ]; then echo "This is Directory!" elif [ -f "$1" ]; then echo "This is a Commin Files!" elif [ -L "$1" ]; then echo "This is a Link Files." elif [ -b "$1" ]; then echo "This is Block Files!" elif [ -c "$1" ]; then echo "This is Charactor Files!" elif [ -S "$1" ]; then echo "This is a Socket Files." else echo "Unknown Files or Directory!" fi
测试或者选择语句还有第三种语句,叫做case语句,其实case语句就是简化版的多分支语句,用于实现简化版的多分支if,但未必每个多分支的if语句都能写成case语句,还有就是if语句其实是可以嵌套的,也就是说,if中可以继续使用if,还可以包含其它执行语句。
注意:if语句可嵌套
所谓循环执行我们此前讲过,无非就是将一段代码重复执行n次,能够实行将一段代码重复实行n次,需要注意的是,要实行循环时,就要指定其循环次数,我们要想办法控制其循环次数,不然的话则无法退出,变成死循环,当然也有些场合是需要实行死循环。
对于循环来说有两个关键要点,一种就是进入条件,就是什么时候开始循环,另一种就是退出条件,而这两点非常重要。所谓进入条件指的是,当程序执行到循环体时,判断是否能够执行以及是否能够执行,要取决于记录条件。
循环执行:将一段代码重复执行0次、1次或多次; 进入条件:条件满足时则进入循环; 退出条件:每个条件都应该有退出条件,以有机会退出循环;
对于bash脚本来讲,共有三种循环方式,分别为:
bash脚本: for循环 while循环 until循环
后两者没有太大的区别,除了进入条件相反。
对于for循环来说,将列表中的每个元素依次赋值给VARIABLE中进行遍历执行循环体即可,for循环共有两种格式。
for循环: 两种格式: (1) 遍历列表 (2) 控制变量
我们先说第一种,通过遍历列表的格式,则for循环遍历语法格式为:
遍历列表: for VARIABLE in LIST; do 循环体 done
那么for循环的进入条件和退出条件为:
进入条件:只要列表有元素,即可进入循环; 退出循环:列表中的元素遍历完成;
例如:创建是个文件,从f1-f10。
#!/bin/bash # for i in 1 2 3 4 5 6 7 8 9 10; do touch /tmp/f$1 done
当然如果要是这样创建100个文件的话,确实是一件非常麻烦的事情,另外一个,不能直接使用touch命令,很有可能是会更改时间戳的,真正创建文件时,应该判断是否存在,如果不存在则创建,存在的话则更改一下时间戳而已。所以说一定要注意该命令实现什么功能,是否有其幂等性,每个循环当中的幂等是能够重复执行的,幂等执行可允不允许重复执行,即使不重复执行时,哪怕只执行一次,也得有个意外条件,所以说判断至关重要。
那么LIST
的生成方式有很多中,刚才给出的示例也是其中一种,那么我们现在对于LIST的生成方式做一下简单的阐述:
LIST生成方式: (1) 直接给出; (2) 整数列表 (a) {start..end} (b) seq [start [incremtal]] last (3) 返回列表的指令; (4) glob; (5) 变量引用 $@, $# ... ...
2018-3-26Linux系统管理(14)bash脚本编程之循环控制语句
原文地址:http://blog.51cto.com/tianxie/2091968