• shell--for循环


    1.带列表for循环

    语法格式

    1. for 循环变量 in 列表
    2. do
    3. 执行语句
    4. ...
    5. done

    在上面的语法中,循环变量是每次循环时得到的列表的某一个数据,当循环一次结束后,再获取另一个数,然后再执行 do 里面的语句,依次类推,直到列表中数据循环完结。

    for 循环中的列表中的数据是以空格来进行分隔的

    示例:直接列出列表的所有元素

    1. [root@openEuler ~]# cat for1.sh
    2. #!/bin/bash
    3. for var in 192.168.72.130 192.168.72.131 192.168.72.132
    4. do
    5. echo $var
    6. done
    7. [root@openEuler ~]# bash for1.sh
    8. 192.168.72.130
    9. 192.168.72.131
    10. 192.168.72.132

    在带列表的for循环中,还可以指定循环的步长,它的语法格式为:

    1. for 循环变量 in {开始..结束..步长}
    2. do
    3. 语句
    4. ....
    5. done

    示例:循环输入 1~10中的奇数

    1. [root@openEuler ~]# cat for2.sh
    2. #!/bin/bash
    3. for v in {1..10..2}
    4. do
    5. echo $v
    6. done
    7. [root@openEuler ~]# bash for2.sh
    8. 1
    9. 3
    10. 5
    11. 7
    12. 9

    示例:获取根目录下所有文件名作为变量的值打印输出。

    1. [root@openEuler ~]# cat for3.sh
    2. #!/bin/bash
    3. for file in $(ls -F / | grep -v /$)
    4. do
    5. echo $file
    6. done
    7. [root@openEuler ~]# bash for3.sh
    8. bin@
    9. lib@
    10. lib64@
    11. sbin@

    示例:打印出如下的语句中字符数不大于6的单词。

    1. [root@openEuler ~]# cat for4.sh
    2. #!/bin/bash
    3. for word in hello world rabbit favorite eat apple cabbage
    4. do
    5. if [ `expr length ${word}` -le 6 ]; then
    6. echo $word
    7. fi
    8. done
    9. [root@openEuler ~]# bash for4.sh
    10. hello
    11. world
    12. rabbit
    13. eat
    14. apple

    2.不带列表循环

    语法格式:

    1. for 循环变量
    2. do
    3. 语句
    4. ...
    5. done

    示例:循环输入所有的参数

    1. [root@openEuler ~]# cat for5.sh
    2. #!/bin/bash
    3. for v in $@
    4. do
    5. echo $v
    6. done
    7. [root@openEuler ~]# bash for5.sh
    8. [root@openEuler ~]# bash for5.sh {1..5}
    9. 1
    10. 2
    11. 3
    12. 4
    13. 5

    3.类C风格循环

    语法格式:

    1. for ((表达式1;表达式2;表达式3))
    2. do
    3. 语句
    4. done

    示例:批量创建用户,用户名以 test 开头,按数字序号变化。一共添加 30 个账号,名称如:test01、test02、...、test10、....test30          用户初始密码为 Abc123456

    1. [root@openEuler ~]# cat for6.sh
    2. #!/bin/bash
    3. for ((i=1;i<=30;i++))
    4. do
    5. if [ $i -lt 10 ]; then
    6. user=test0$i
    7. else
    8. user=test$i
    9. fi
    10. if ! id -u $user &> /dev/null
    11. then
    12. useradd $user
    13. echo "Abc123456" | passwd --stdin $user &> /dev/null
    14. else
    15. echo "$user is exists"
    16. fi
    17. done
    18. [root@openEuler ~]# bash for6.sh
    19. [root@openEuler ~]# grep test /etc/passwd
    20. test01:x:1001:1001::/home/test01:/bin/bash
    21. test02:x:1002:1002::/home/test02:/bin/bash
    22. test03:x:1003:1003::/home/test03:/bin/bash
    23. test04:x:1004:1004::/home/test04:/bin/bash

  • 相关阅读:
    Warmup小记
    Kubernetes 架构核心组件工作原理解析
    “如果哪天腾讯遇到了更大的挑战,也许就是新的一天开始了。“
    深度学习之环境配置 jupyter notebook
    基于STM32G431嵌入式学习笔记——八、PWM脉冲输出(基于第12届蓝桥杯节选PA7作引脚)
    免密登录和Jenkins自动复制jar包以及启动
    网络安全(一):信息收集之玩转nmap(理论篇)
    YOLOv8推理详解及部署实现
    SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.5 变更缓存供应商 Ehcache
    解决库存扣减及订单创建时防止并发死锁的问题
  • 原文地址:https://blog.csdn.net/wengedeid/article/details/138036908