• 【Shell 脚本速成】08、Shell 流程控制——for 循环语句


    目录

    一、循环语句-for

    1.1 for 介绍

    1.2 for基本语法

    1.3 for 条件应用 

    1.4 for C 格式语法

    二、练习案例


     

            工作中总是有很多工作需要重复性来完成,比如每天都需要执行一次备份、每天都需要分析一次业务的access.log日志,每分钟都需要监测一次主机的状态等等工作,这些重复性的工作我们一般都是使用脚本来完成,对于不需要频繁执行的任务,可以结合计划任务➕脚本完成,但是系统的计划任务只能精确到分,不能满足更频繁的重复工作。

    这个时候我们除了依赖计划任务之外还有很多选择,比如脚本中的循环语句。

    循环的优点:

    • 节省内存 10M脚本 1M脚本 哪个更剩内存 完成同一个任务
    • 结构更清晰
    • 节省开发时间成本

    一、循环语句-for

    1.1 for 介绍

            脚本在执行任务的时候,总会遇到需要循环执行的时候,比如说我们需要脚本每隔五分钟执行一次ping的操作,除了计划任务,我们还可以使用脚本来完成,那么我们就用到了循环语句。

    1.2 for基本语法

    列表 for 循环( 也加 for 条件循环):用于将一组命令执行已知的次数。下面给出了for循环语句的基本格式:

    1. for variable_name in {list}
    2. do
    3. command
    4. command
    5. done
    6. 或者
    7. for variable in a b c
    8. do
    9. command
    10. command
    11. done

    1.3 for 条件应用 

    • for 条件不同的赋值方式

    a、赋值来自一个范围

    1. for var in {1..10}
    2. do
    3. echo $var
    4. done

    b、直接赋值

    1. for var in 1 2 3 4 5
    2. do
    3. echo $var
    4. done

    c、赋值来自命令

    1. for var in `seq 10`
    2. do
    3. echo $var
    4. done

    案例演示:

    1. [root@shell ~]# cat for-1.sh
    2. #!/bin/bash
    3. #for test in {1..3}
    4. #for test in 1 2 3
    5. for test in `seq 3`
    6. do
    7. echo "$test"
    8. echo "hello"
    9. echo "haha"
    10. done
    11. # 运行结果一样
    12. [root@shell ~]# sh for-1.sh
    13. 1
    14. hello
    15. haha
    16. 2
    17. hello
    18. haha
    19. 3
    20. hello
    21. haha
    • 不带列表循环

    不带列表的 for 循环执行时由用户指定参数和参数的个数,下面给出了不带列表的for循环的基本格式:

    1. for variable
    2. do
    3. command
    4. command
    5. done

    语法结构举例说明:

    1. [root@shell ~]# cat for-2.sh
    2. #!/bin/bash
    3. for var
    4. do
    5. echo "$var"
    6. echo "haha"
    7. done
    8. echo "脚本后面有$#个参数"
    9. [root@shell ~]# sh for-2.sh 1 2 3 4
    10. 1
    11. haha
    12. 2
    13. haha
    14. 3
    15. haha
    16. 4
    17. haha
    18. 脚本后面有4个参数

    1.4 for C 格式语法

    类 C 风格的 for 循环

    1. for(( expr1;expr2;expr3 ))
    2. do
    3. command
    4. command
    5. done
    6. # 如:
    7. for (( i=1;i<=5;i++))
    8. do
    9. echo $i
    10. done
    11. # 解释说明
    12. expr1:定义变量并赋初值 变量初始值
    13. expr2:决定是否进行循环(条件) 变量的条件
    14. expr3:决定循环变量如何改变,决定循环什么时候退出 自增或自减运算
    15. # 多变量用法
    16. for ((A=1,B=10;A<10,B>1;A++,B--))

    案例演示:

    1. [root@shell ~]# vim for-3.sh
    2. #!/bin/bah
    3. #for (( i=1;i<=5;i++ ))
    4. for (( x=0,y=10;i<=10,y>=0;x++,y-- ))
    5. do
    6. #echo "$i"
    7. echo "$x $y"
    8. echo "hhhhhh"
    9. done
    10. [root@shell ~]# sh for-3.sh
    11. 0 10
    12. hhhhhh
    13. 1 9
    14. hhhhhh
    15. 2 8
    16. hhhhhh
    17. 3 7
    18. hhhhhh
    19. 4 6
    20. hhhhhh
    21. 5 5
    22. hhhhhh
    23. 6 4
    24. hhhhhh
    25. 7 3
    26. hhhhhh
    27. 8 2
    28. hhhhhh
    29. 9 1
    30. hhhhhh
    31. 10 0
    32. hhhhhh

    注意:for 条件不能和 shell 的运算混合使用。 

    二、练习案例

    jobs: 写一个扫描脚本,扫描本地网络中存活的机器

    案例需求:
    判断本地网络中哪些 IP 被使用

    案例分析:
    采用 ping 的方式判断 IP 是否被占用

    • 能ping通说明占用
    • 不能ping通说明未被占用

    算法:

    1. ping ip
    2. 分析ping结果
    3. 输出结果 
    1. [root@shell ~]# vim scan_local_ip.sh
    2. #!/bin/bash
    3. # 根据实际情况填写网段
    4. netsub="192.168.78."
    5. #1、循环ping IP地址,能 ping 通说明IP存在。
    6. for ip in `seq 1 254`
    7. do
    8. (
    9. #2、判断Ping结果
    10. if ping -c1 $netsub$ip &>/dev/null;then
    11. #3、输出结果
    12. echo "$netsub$ip is open"
    13. else
    14. echo "$netsub$ip is close"
    15. fi
    16. ) &
    17. done
    18. # ( ) 表示在括号内的代码块为一组,并发(同时)执行
    19. # -c 表示 ping 的次数
    20. # & 表示后台运行

    上一篇文章:【Shell 脚本速成】07、Shell 流程控制——if 判断语句_Stars.Sky的博客-CSDN博客

    参考文档:流程控制-for循环语句-组团学

  • 相关阅读:
    21、Java 中接口的基本使用
    Intouch Historian历史曲线配置导入导出
    GBase 8s是如何实现库中数据安全保障的
    Day 49 | 121. 买卖股票的最佳时机 & 122. 买卖股票的最佳时机 II
    Java Class isAnonymousClass()实例讲解
    2023湖南中医药大学计算机考研信息汇总
    【力扣】16. 最接近的三数之和
    计算机组成原理-第三章 存储系统【期末复习|考研复习】
    2022-11-17 mysql列存储引擎-聚合运算中间结果缓存磁盘文件以避免OOM-需求分析
    RocketMQ 核心编程模型以及生产环境最佳实践
  • 原文地址:https://blog.csdn.net/weixin_46560589/article/details/128188246