• 【shell】循环语句(for、while、until)


    目录

    一、循环语句的特点

    二、三种常用的循环

    2.1  for循环

    2.2  while循环

    2.3  until循环

    2.4  死循环

    2.5  关于continue和break以及exit 

    三、实操案例

    3.1 累加1到100(5种办法,穿插多种运算习惯)

    3.2 批量修改文件名称

    3.3 ping来获取内网所有存活的主机

    3.4 直角三角形

    3.5 九九乘法表

    3.6 猜价格


    一、循环语句的特点

    特点:一定要有可以跳出循环的条件,否则就是死循环

    那么跳出循环的条件有两种:

    ①已知循环的次数;

    ②未知次数,但是有跳出循环的限定条件;

    二、三种常用的循环

    2.1  for循环

    1. ##第一种语法
    2. for i in {词语列表}
    3. do
    4. 命令序列
    5. done
    6. ##第二种语法
    7. for((i=1;i<=100;i++))
    8. do
    9. 命令序列
    10. done

    2.2  while循环

    1. while [ 判断 ] ##条件成立继续循环,条件不成立,不再循环
    2. do
    3. 命令序列
    4. let i++ ##类似的语句
    5. done

    2.3  until循环

    1. until [ 判断 ] ##条件不成立执行循环,条件成立则不再继续执行
    2. do
    3. 命令序列
    4. let i++ ##也可不是这种,就是会让时间循环起来的条件
    5. done

    2.4  死循环

    1. while的死循环
    2. while true ##永远是真,那么已知执行循环
    3. while : ##永远是真,那么已知执行循环
    4. while [ 1 -eq 1 ] ##永远是真,那么已知执行循环
    5. until的死循环
    6. until false ##永远是假的,那么已知执行
    7. until [ 1 -eq 0 ] ##永远是假的,那么已知执行循环

    2.5  双重循环之关于continue和break以及exit 

    1. #!/bin/bash
    2. for((i=1;i<=3;i++))
    3. do
    4. for((j=1;j<=3;j++))
    5. do
    6. if [ $j -eq 2 ]
    7. then
    8. # continue
    9. # break
    10. exit
    11. else
    12. echo j=$j
    13. fi
    14. done
    15. echo ------------------
    16. done

    三、实操案例

    3.1 累加1到100(5种办法,穿插多种运算习惯)

    1. ##第一种办法,使用for循环
    2. suma=0
    3. for i in {1..100}
    4. do
    5. suma=$[suma+i]
    6. done
    7. echo sum1=${suma}
    8. ##第二种办法,还是使用for循环
    9. sumb=0
    10. for((j=0;j<=100;j++))
    11. do
    12. let sumb+=$j
    13. done
    14. echo sum2=${sumb}
    15. ##第三种办法,使用while循环
    16. sumc=0
    17. n=0
    18. while [ $n -le 100 ]
    19. do
    20. sumc=`expr ${sumc} + $n`
    21. let n++
    22. done
    23. echo sum3=${sumc}
    24. ##第四种方法,使用until语句
    25. sumd=0
    26. x=0
    27. until [ $x -gt 100 ]
    28. do
    29. sumd=$((${sumd}+${x}))
    30. let x+=1
    31. done
    32. echo sum4=${sumd}
    33. ##第五种办法,使用seq和bc计算
    34. sume=$(seq -s+ 100|bc)
    35. echo sum5=${sume}

    表示0-100的奇数和偶数的方式

    使用花括号:奇数{1..100..2} 偶数{0..100..2}

    使用seq:奇数 seq 1 2 100 偶数 seq 0 2 100

    使用for循环:奇数((i=1;i<=100,i+=2));偶数((i=0;i<=100,i+=2))

    3.2 批量修改文件名称

    1. #!/bin/bash
    2. for i in /xh/*.bak ##表示变量i的取值来源于文件夹xh下面的以bak结尾的文件
    3. do
    4. name=$(echo $i|cut -d"." -f1) ##表示每次循环的动作是,先将bak前面的名称提取出来给name变量赋值
    5. mv $i ${name}.txt ##变量i就是文件名,然后把原来的文件名改为新的文件名,以txt结尾
    6. done

    3.3 ping来获取内网所有存活的主机

     

    1. #!/bin/bash
    2. ip=$(ifconfig ens33|grep netmask|awk '{print $2}') ##提取本机的ip地址
    3. net=${ip%.*}. ##提取本机的网段
    4. end=254
    5. for((i=3;i<="${end}";i++)) ##设置循环条件从3到254循环
    6. do
    7. {
    8. ping -c2 -W1 ${net}${i} &>/dev/null ##使用ping检测主机是否存活
    9. if [ $? -eq 0 ] ##能ping通则是0,ping不通是非0
    10. then
    11. echo ${net}${i} >>/xh/alive ##将存活的主机记录在文件中
    12. fi
    13. }& ##并行运行,可以大大提高脚本的执行速度
    14. done
    15. wait ##这个很重要,让主机能够把新文件/xh/alive文件存留下来
    16. n=`cat /xh/alive|wc -l` ##统计文本的行数即为主机的数量
    17. echo "你一共有${n}台主机存活"

    3.4 直角三角形

    1. #!/bin/bash
    2. for((i=10;i>=0;i--))
    3. do
    4. for((j=1;j<=i;j++))
    5. do
    6. echo -e "*\c"
    7. done
    8. echo
    9. done

    3.5 九九乘法表

    1. #!/bin/bash
    2. for i in {1..9} ##从1-9中取值
    3. do
    4. for((j=1;j<=i;j++)) ##这个也可以写成 for j in `seq $i`
    5. do
    6. echo -e "$j*$i=$[i*j]\t\c" ##这是乘法表的格式几乘几得出结果,-e可以使用\t制表符对齐,\c不换行
    7. done
    8. echo ##这个echo是用来换行的
    9. done

    3.6 猜价格

    1. #!/bin/bash
    2. com=`echo $[RANDOM%1000+1]` ##机器产生的随机数
    3. t=0
    4. while true
    5. do
    6. read -p "请输入你猜的价格(1-1000):" price ##人类输入的价格数字
    7. let t++ ##统计猜的次数
    8. if [ ${com} -eq ${price} ]
    9. then
    10. echo "恭喜你猜对了,实际价格为${price},你一共猜了${t}次"
    11. exit
    12. elif [ ${com} -gt ${price} ]
    13. then
    14. echo "不好意思,你猜低了"
    15. else
    16. echo "猜高了,便宜点"
    17. fi
    18. done

    3.7 判断用户是否在线,在线发送hello,不在线显示用户不在线

  • 相关阅读:
    独立站,如何提高网站转化率
    记一次Docker容器失败的逃逸
    excel文件运行报错(xx.xlsx)不是有效的win32应用程序
    zemax畸变与消畸变
    972信息检索 | 第八章 移动搜索
    「学习笔记」字符串基础:Hash,KMP与Trie
    AUTOSAR汽车电子嵌入式编程精讲300篇-基于嵌入式惯导技术的移动靶车设计
    k8s configMap挂载(项目配置文件放到configMap中,不同环境不同配置)
    【C语言】函数详解第一期,函数基础
    为什么MySQL使用B+树索引,而不使用其他作为索引呢?
  • 原文地址:https://blog.csdn.net/liu_xueyin/article/details/134552265