2021-05-10

【●】 循环结构
   有时我们需要某个或者某群任务反复在服务器中执行很多次,就可以使用循环命令写成脚本,而无需手工一次次执行
一、for循环 
  1. 语句结构及特点
    根据变量的不同取值,重复执行命令序列(有次数的循环)
    for  变量名  in  值1  值2  值3    #此处变量名可以自定义,通常习惯用i,值的多少决定了下面do与done之间的任务执行多少次,每个值之间有空格,这里是有3个值,所以就循环执行指令3次
    do
    循环任务
    done
--------------------------------------      
    #!/bin/bash
    for i in {1..100}           #执行100次任务的简略写法,但不支持变量
    do
         echo ${i}abc
    done

     #!/bin/bash
     a=100
     for i in $(seq $a)
      do
           echo ${i}abc
      done
-------------------------------------
  #!/bin/bash
   a=100
    for i in $(seq $a)    //使用seq支持变量
    do
        echo ${i}abc
    done
---------------------------------
   编写脚本,用ping命令测试192.168.4.1~192.168.4.15是否可以通
     #!/bin/bash
    for i in {1..15}
    do
             ping -c 4 -i 0.2 -W 1  192.168.4.$i &> /dev/null
    if [ $? -eq 0 ]; then 
             echo "192.168.4.$i 通了!"
    else 
            echo "192.168.4.$i 不通!"
    fi
    done
------------------------------------------------------
   改良版:
      #!/bin/bash
       x=0
       y=0
       for i in {1..15}
       do
                      ping -c 4 -i 0.2 -W 1  192.168.4.$i &> /dev/null
                     if [ $? -eq 0 ]; then 
                           echo "192.168.4.$i 通了!"
                           let x++
       else 
                           echo "192.168.4.$i 不通!"
                            let y++
      fi
      done
      echo "$x台通了,$y台不通"

-----------------------------------------------------------------------
二、while循环
  1. 语句结构及特点
    反复测试条件,只要成立就执行命令序列,可以根据条件循环次数
    如果条件测试成功,就执行下面的指令,然后再回来继续看条件测试能否成功,如果成功就继续    执行指令,且可以实现无限循环,一旦发现条件测试失败了,就立刻终止循环
    while   条件测试
    do
            命令序列
    done

             #!/bin/bash
             while [ 1 -eq 1 ]   #故意写一个永远正确的条件测试可以实现无限循环
             do
                        echo abc
                        sleep 0.2   #如果系统执行任务消耗CPU比较多,可以每次稍微休息0.2秒
             done  
----------------------------------------------------------------------
【●】case语句
一、case分支结构
   1.语法结构及特点(功能类似于if,编写时语句比if精简)
   ●  检查变量的实际取值
    —如果与预设的值相匹配,则执行对应的操作
    case    变量值    in                   #如果调用的变量内容与下面某个模式一致,就执行模式下面的指令
    模式1)                                  #模式可以有很多
           命令序列1;;                 #指令需要用双分号结尾,如果一个模式有多个指令,那只需在该模式的最后一条指令后加双分号即可
    模式2)
           命令序列2;;
      ·· ··
     *)
           默认命令序列
     esac

      case    调用变量的名称   in      #如果调用的变量内容与下面某个模式一致,就执行模式下面的指令
      模式1)                                 #模式可以有很多
                    执行指令;;           #指令需要用双分号结尾,如果一个模式有多个指令,那只需在该模式的最后一条指令后加双分号即可
      模式2)
                    执行指令;;
          ·· ··
       *)
                    执行指令
       esac
----------------------------------------------
    [root@svr7 opt]# vim test02.sh
     #!/bin/bash
      case $1  in
      a)
              echo 123;;
      b)
              echo 456;;  
       *)    
              echo "请输入a或b"
        esac
     [root@svr7 opt]# vim test02.sh
     [root@svr7 opt]# bash test02.sh  c
     请输入a或b
     [root@svr7 opt]# bash test02.sh  a
      123
     [root@svr7 opt]# bash test02.sh  b
      456
------------------------------------------------
    [root@svr7 opt]# vim test02.sh
    #!/bin/bash
    case $1  in 
    t)                                     #如果$1是t就执行touch任务
                   touch $2;;
    m)                                  #如果$1是m就执行mkdir任务
                   mkdir $2;;
    r)                                     #如果$1是r就执行rm任务
                   rm -rf $2;;
    *)
               echo "请输入t或m或r"
     esac    
    [root@svr7 opt]# bash test02.sh  t abc
    [root@svr7 opt]# ls
     abc  test01.sh  test02.sh
    [root@svr7 opt]# bash test02.sh  m abcd
    [root@svr7 opt]# ls
     abc  abcd  test01.sh  test02.sh
    [root@svr7 opt]# bash test02.sh  r abcd
    [root@svr7 opt]# bash test02.sh  r abc
    [root@svr7 opt]# ls
     test01.sh  test02.sh
------------------------------------------------------------------------------------------------
  二、编写部署软件脚本
    1.  一键安装Nginx
      —   一键源码安装Nginx软件
      —    脚本自动安装相关软件的依赖包
      —   脚本自动判断yum是否可用
   ●   配置nginx服务,nginx与httpd一样也是网站服务,但安装和使用方式有所不同编写脚本,          安装nginx
   ◆ 释放软件包
    [root@svr7 ~]# tar -xf lnmp_soft.tar.gz                #释放软件包
    [root@svr7 ~]# cp lnmp_soft/nginx-1.17.6.tar.gz  /opt       #拷贝nginx到opt下
    [root@svr7 ~]# cd /opt
   [root@svr7 opt]# vim test03.sh
    #!/bin/bash
     yum -y install gcc make pcre-devel openssl-devel      # 安装依赖
     tar -xf nginx-1.17.6.tar.gz                                              #释放nginx的tar包
     cd nginx-1.17.6                                                               #进入nginx目录
     ./configure                                                                      #配置
     make                                                                               #编译
     make install                                                                    #安装
    [root@svr7 opt]# bash test03.sh                                   
    [root@svr7 opt]# ls /usr/local/nginx                             #脚本执行完毕后查看        
    [root@svr7 opt]# systemctl stop httpd                         #关闭之前网站服务                      
    [root@svr7 opt]# /usr/local/nginx/sbin/nginx             #开启nginx
    [root@svr7 opt]# systemctl stop firewalld                    #关闭防火墙               
     使用浏览器访问虚拟机地址,比如http://192.168.4.7 看到欢迎字样即可
-----------------------------------------------------------------------------------
   2. 使用case分支编写脚本,用来控制nginx服务
      #!/bin/bash
      case $1 in    //使用执行脚本后的第1个位置变量作为匹配对象
      start|kai|k)  //如果$1是start|kai|k中的任意一个就执行下面命令
                 /usr/local/nginx/sbin/nginx;;    //开服务
      stop|guan)  //如果$1是stop|guan中的任意一个就执行下面命令
                  /usr/local/nginx/sbin/nginx -s stop;;   //关服务
      restart|cq)   //如果$1是restart|cq中的任意一个就执行下面命令
                 /usr/local/nginx/sbin/nginx -s stop     //先关闭
                 /usr/local/nginx/sbin/nginx;;     //再开启,相当于重启服务
      cha|status)
                 netstat -ntulp | grep -q nginx
                 [ $? -eq 0 ] && echo "nginx正在运行。。。"  || echo "nginx未开启。。。";;
       *)
                  echo "请输入start|stop|restart"
       esac

----------------------------------------------------------------------
  3.  netstat 命令可以查询系统启动的端口信息
     -n以数字格式显示端口号
     -t显示TCP连接的端口
     -u显示UDP连接的端口
     -l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
     -p显示监听端口的服务名称是什么(也就是程序名称)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值