While 循环

可以将 While 循环称为 "条件循环"

While 循环语法

  1. # 条件为 true 就执行循环体代码,条件变为 false 循环结束
  2. while 条件
  3. do
  4. 命令1
  5. 命令2
  6. 命令3
  7. ...
  8. done
  9. # 示例
  10. #!/bin/bash
  11. count=0
  12. while [ $count -lt 5 ]
  13. do
  14. echo $count
  15. let count++ # 5
  16. done

Until 循环语法

  1. # 条件为 false 就执行循环体代码,条件变为 true 循环结束
  2. until 条件
  3. do
  4. 命令1
  5. 命令2
  6. 命令3
  7. ...
  8. done
  9. # 示例
  10. #!/bin/bash
  11. count=0
  12. until [ $count -eq 5 ]
  13. do
  14. echo $count
  15. let count++ # 5
  16. done

While 循环关键字

Break:立即终止本层循环

Continue:终止本次循环

  1. #!/bin/bash
  2. count=0
  3. while [ $count -lt 5 ] # 1 < 5
  4. do
  5. if [ $count -eq 3 ];then
  6. # break
  7. let count++
  8. continue
  9. fi
  10. echo $count
  11. let count++ # 3
  12. done

总结:结束 while 循环的两种方案

①. — 在循环体代码中把某个值改掉,让 While 循环条件变为假

  1. [root@zzzwqh wqh05]# cat test.sh
  2. #!/bin/bash
  3. count=0
  4. while [ $count -lt 3 ]
  5. do
  6. echo 1111
  7. count=100
  8. echo 2222
  9. echo 3333
  10. done
  11. # 此时循环体内代码会执行完,之后结束脚本
  12. [root@zzzwqh wqh05]# ./test.sh
  13. 1111
  14. 2222
  15. 3333
  16. [root@zzzwqh wqh05]#

②. — break,直接退出本层 While 循环

  1. [root@zzzwqh wqh05]# cat test.sh
  2. #!/bin/bash
  3. count=0
  4. while [ $count -lt 3 ]
  5. do
  6. echo 1111
  7. #count=100
  8. break
  9. echo 2222
  10. echo 3333
  11. done
  12. # 此时循环体内代码不会执行完,break 后的代码不会执行
  13. [root@zzzwqh wqh05]# ./test.sh
  14. 1111
  15. [root@zzzwqh wqh05]#

③. — 延伸,多层嵌套时,设置相同 While 循环条件,退出循环时,一起退出

  1. # 正常情况下,break 结束嵌套多层的循环,要写很多层
  2. while 条件1
  3. do
  4. while 条件2
  5. do
  6. while 条件3
  7. do
  8. break
  9. done
  10. break
  11. done
  12. break
  13. done
  14. # 把条件改为 false
  15. tag=true
  16. while $tag
  17. do
  18. while $tag
  19. do
  20. while $tag
  21. do
  22. tag=false
  23. done
  24. done
  25. done

While 循环示例

Wget 测试网络

  1. [root@zzzwqh wqh05]# cat check_web.sh
  2. #!/bin/bash
  3. [ $# -ne 1 ] && echo "只能输入一个参数" && exit
  4. url=$1
  5. count=0
  6. while true
  7. do
  8. echo "=========>$count"
  9. if [ $count -eq 3 ];then
  10. echo "报警:$url is dead"
  11. break
  12. fi
  13. wget --timeout=1 --tries=3 $url -q
  14. if [ $? -eq 0 ];then
  15. echo "$url is ok"
  16. break
  17. else
  18. let count++
  19. fi
  20. done
  21. [root@zzzwqh wqh05]#
  22. [root@zzzwqh wqh05]# ./check_web.sh
  23. 只能输入一个参数
  24. [root@zzzwqh wqh05]# ./check_web.sh www.baidu.com
  25. =========>0
  26. www.baidu.com is ok
  27. [root@zzzwqh wqh05]# ./check_web.sh www.zzzwqh.com.cn
  28. =========>0
  29. =========>1
  30. =========>2
  31. =========>3
  32. 报警:www.zzzwqh.com.cn is dead

读取文件按行打印

  1. [root@zzzwqh wqh05]# cat 6.sh
  2. #!/bin/bash
  3. while read line
  4. do
  5. echo $line
  6. done < a.txt
  7. [root@zzzwqh wqh05]# ./6.sh
  8. 11111 1:1 1
  9. 22222
  10. 3333
  11. 4444
  12. [root@zzzwqh wqh05]#

动态监测系统状态

  1. [root@zzzwqh ~]# while :;do free;sleep 0.5;clear;done

For 循环

可以将 For 循环称为 "取值循环"

Shell 风格语法

  1. for i in value1 value2 value3
  2. do
  3. echo $i
  4. done
  5. # 示例
  6. [root@zzzwqh wqh05]# cat example.sh
  7. #!/bin/bash
  8. for i in "aaa" 222 "ccc"
  9. do
  10. echo $i
  11. done
  12. # 取范围
  13. [root@zzzwqh wqh05]# example.sh
  14. #!/bin/bash
  15. for i in {5..1}
  16. do
  17. echo $i
  18. done
  19. for i in {a..z}
  20. do
  21. echo $i
  22. done

C 语言风格语法

  1. # 语法格式
  2. #!/bin/bash
  3. for ((i=0;i<3;i++))
  4. do
  5. echo "命令1"
  6. echo "命令2"
  7. echo "命令3"
  8. done

Break & Continue 适用于 For 循环

  1. # A-Z 忽略 C
  2. [root@zzzwqh wqh05]# cat 9.sh
  3. #!/bin/bash
  4. for i in {A..Z}
  5. do
  6. if [ $i == "C" ];then
  7. # break
  8. continue
  9. fi
  10. echo $i
  11. done
  12. [root@zzzwqh wqh05]#

For 循环示例

统计指定目录下文件的类型

  1. [root@k8s-master 828]# cat file_type_sum.sh
  2. #!/bin/bash
  3. path=$1
  4. block_type=0
  5. regular_type=0
  6. symbolic_type=0
  7. directory_type=0
  8. character_type=0
  9. [ $# -ne 1 ] && echo "需要指定一个目录" && exit
  10. for i in `ls $path`
  11. do
  12. [ -b /$path/$i ] && let block_type++
  13. [ -L /$path/$i ] && let symbolic_type++
  14. [ -d /$path/$i ] && let directory_type++
  15. [ -f /$path/$i ] && let regular_type++
  16. [ -c /$path/$i ] && let character_type++
  17. done
  18. echo "块文件:$block_type"
  19. echo "普通文件:$regular_type"
  20. echo "软链接文件:$symbolic_type"
  21. echo "目录文件:$directory_type"
  22. echo "字符设备文件:$character_type"

While & For 循环的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  5. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  6. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  7. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  8. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  10. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. ctfhub技能树—RCE—过滤cat

    打开靶机 查看页面信息 构造payload 127.0.0.1 || ls 题目提示过滤了cat,但我还是想试试 果然不行 网页访问没有结果,应该和上题一样被注释了,使用和同样的方法进行解题 利用命令 ...

  2. 【七天搞定Python】day01.Python环境配置、pip、IDE、注释、变量,数据类型、标识符/关键字、输出、输入

    什么是Python? 动态解释型语言,1982年由荷兰人Guido von Rossum发明. 更多细节可以google,这里不做展开. Python解释器: CPython(官方版本C语言实现) I ...

  3. Genymotion虚拟机用键盘输入中文

    genymotion我用的版本是3.0.4,安卓内核版本从4到9都进行了尝试,尤其是教新的版本原生是不带中文输入法的. 前提:安装Genymotion以后,想要随意安装app,需要先安装Genymot ...

  4. Ajax中的同源政策

    Ajax中的同源政策 Ajax请求限制 Ajax只能向自己的服务器发送请求.比如现在有一个A网站.有一个B网站,A网站中的HTML文件只能向A网站服务器中发送Ajax请求,B网站中的HTML文件只能向 ...

  5. Angular入门到精通系列教程(14)- Angular 编译打包 & Docker发布

    目录 1. 概要 2. 编译打包 2.1. 基本打包命令 2.2. 打包部署到二级目录 3. Angular站点的发布 3.1. web服务器发布 3.2. 使用docker发布 4. 总结 环境: ...

  6. Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁

    Optimistic concurrency control https://en.wikipedia.org/wiki/Optimistic_concurrency_control Optimist ...

  7. worker 启动时向 etcd 注册自己的信息,并设置一个带 TTL 的租约,每隔一段时间更新这个 TTL,如果该 worker 挂掉了,这个 TTL 就会 expire 并删除相应的 key。

    1.通过etcd中的选主机制,我们实现了服务的高可用.同时利用systemd对etcd本身进行了保活,只要etcd服务所在的机器没有宕机,进程就具备了容灾性. https://mp.weixin.qq ...

  8. Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制

    拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...

  9. vim自动添加C C++ sh文件头

    set foldenable set foldmethod=manual set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 set ...

  10. ifndef /define/ endif 作用和用法

    问题:ifndef/define/endif"主要目的是防止头文件的重复包含和编译====================================================== ...