2018-3-26Linux系统管理(14)bash脚本编程之循环控制语句

  咱们在上个章节中讲到了如何使用yum来实现所谓的程序包管理,对于yum而言,它只是rpm包的一个前段管理工具,并非取代rpm后端管理工具,它只是提供了较好的、基于仓库的、完成元数据自动分析以及依赖关系自动分析及自动解决的这么一个工具,可是强依赖于yum仓库的存在,可是yum的工做架构为C/S架构,首先,对于须要安装某个程序软件来说,咱们就称之为客户端(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源还有extrasupdates。不管是那个发行版,将光盘做为一个最基本的仓库来安装程序包,剩余则都是补充而已。bash

  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脚本的内容。编程语言

1、bash脚本编程之if语句

  此前咱们也讲过,一个过程式编程语言的执行流程大体分为三类:ide

   过程式编程语言的执行流程:
        顺序执行
        选择执行
        循环执行

  回顾咱们此前讲到的选择执行,选择执行能够有两种方式来实现,第一种&&以及||,这是最经常使用的两种机制,第二种是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语句可嵌套

2、bash脚本之循环语句

  所谓循环执行咱们此前讲过,无非就是将一段代码重复执行n次,可以实行将一段代码重复实行n次,须要注意的是,要实行循环时,就要指定其循环次数,咱们要想办法控制其循环次数,否则的话则没法退出,变成死循环,固然也有些场合是须要实行死循环。

  对于循环来讲有两个关键要点,一种就是进入条件,就是何时开始循环,另外一种就是退出条件,而这两点很是重要。所谓进入条件指的是,当程序执行到循环体时,判断是否可以执行以及是否可以执行,要取决于记录条件。

   循环执行:将一段代码重复执行0次、1次或屡次;
       进入条件:条件知足时则进入循环;
       退出条件:每一个条件都应该有退出条件,以有机会退出循环;

  对于bash脚原本讲,共有三种循环方式,分别为:

   bash脚本:
       for循环
       while循环
       until循环

  后二者没有太大的区别,除了进入条件相反。

2.1 for循环

  对于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) 变量引用
           $@, $#
    
       ... ...
相关文章
相关标签/搜索