While & For 循环
While 循环
可以将 While 循环称为 "条件循环"
While 循环语法
# 条件为 true 就执行循环体代码,条件变为 false 循环结束
while 条件
do
命令1
命令2
命令3
...
done
# 示例
#!/bin/bash
count=0
while [ $count -lt 5 ]
do
echo $count
let count++ # 5
done
Until 循环语法
# 条件为 false 就执行循环体代码,条件变为 true 循环结束
until 条件
do
命令1
命令2
命令3
...
done
# 示例
#!/bin/bash
count=0
until [ $count -eq 5 ]
do
echo $count
let count++ # 5
done
While 循环关键字
Break:立即终止本层循环
Continue:终止本次循环
#!/bin/bash
count=0
while [ $count -lt 5 ] # 1 < 5
do
if [ $count -eq 3 ];then
# break
let count++
continue
fi
echo $count
let count++ # 3
done
总结:结束 while 循环的两种方案
①. — 在循环体代码中把某个值改掉,让 While 循环条件变为假
[root@zzzwqh wqh05]# cat test.sh
#!/bin/bash
count=0
while [ $count -lt 3 ]
do
echo 1111
count=100
echo 2222
echo 3333
done
# 此时循环体内代码会执行完,之后结束脚本
[root@zzzwqh wqh05]# ./test.sh
1111
2222
3333
[root@zzzwqh wqh05]#
②. — break,直接退出本层 While 循环
[root@zzzwqh wqh05]# cat test.sh
#!/bin/bash
count=0
while [ $count -lt 3 ]
do
echo 1111
#count=100
break
echo 2222
echo 3333
done
# 此时循环体内代码不会执行完,break 后的代码不会执行
[root@zzzwqh wqh05]# ./test.sh
1111
[root@zzzwqh wqh05]#
③. — 延伸,多层嵌套时,设置相同 While 循环条件,退出循环时,一起退出
# 正常情况下,break 结束嵌套多层的循环,要写很多层
while 条件1
do
while 条件2
do
while 条件3
do
break
done
break
done
break
done
# 把条件改为 false
tag=true
while $tag
do
while $tag
do
while $tag
do
tag=false
done
done
done
While 循环示例
Wget 测试网络
[root@zzzwqh wqh05]# cat check_web.sh
#!/bin/bash
[ $# -ne 1 ] && echo "只能输入一个参数" && exit
url=$1
count=0
while true
do
echo "=========>$count"
if [ $count -eq 3 ];then
echo "报警:$url is dead"
break
fi
wget --timeout=1 --tries=3 $url -q
if [ $? -eq 0 ];then
echo "$url is ok"
break
else
let count++
fi
done
[root@zzzwqh wqh05]#
[root@zzzwqh wqh05]# ./check_web.sh
只能输入一个参数
[root@zzzwqh wqh05]# ./check_web.sh www.baidu.com
=========>0
www.baidu.com is ok
[root@zzzwqh wqh05]# ./check_web.sh www.zzzwqh.com.cn
=========>0
=========>1
=========>2
=========>3
报警:www.zzzwqh.com.cn is dead
读取文件按行打印
[root@zzzwqh wqh05]# cat 6.sh
#!/bin/bash
while read line
do
echo $line
done < a.txt
[root@zzzwqh wqh05]# ./6.sh
11111 1:1 1
22222
3333
4444
[root@zzzwqh wqh05]#
动态监测系统状态
[root@zzzwqh ~]# while :;do free;sleep 0.5;clear;done
For 循环
可以将 For 循环称为 "取值循环"
Shell 风格语法
for i in value1 value2 value3
do
echo $i
done
# 示例
[root@zzzwqh wqh05]# cat example.sh
#!/bin/bash
for i in "aaa" 222 "ccc"
do
echo $i
done
# 取范围
[root@zzzwqh wqh05]# example.sh
#!/bin/bash
for i in {5..1}
do
echo $i
done
for i in {a..z}
do
echo $i
done
C 语言风格语法
# 语法格式
#!/bin/bash
for ((i=0;i<3;i++))
do
echo "命令1"
echo "命令2"
echo "命令3"
done
Break & Continue 适用于 For 循环
# A-Z 忽略 C
[root@zzzwqh wqh05]# cat 9.sh
#!/bin/bash
for i in {A..Z}
do
if [ $i == "C" ];then
# break
continue
fi
echo $i
done
[root@zzzwqh wqh05]#
For 循环示例
统计指定目录下文件的类型
[root@k8s-master 828]# cat file_type_sum.sh
#!/bin/bash
path=$1
block_type=0
regular_type=0
symbolic_type=0
directory_type=0
character_type=0
[ $# -ne 1 ] && echo "需要指定一个目录" && exit
for i in `ls $path`
do
[ -b /$path/$i ] && let block_type++
[ -L /$path/$i ] && let symbolic_type++
[ -d /$path/$i ] && let directory_type++
[ -f /$path/$i ] && let regular_type++
[ -c /$path/$i ] && let character_type++
done
echo "块文件:$block_type"
echo "普通文件:$regular_type"
echo "软链接文件:$symbolic_type"
echo "目录文件:$directory_type"
echo "字符设备文件:$character_type"
While & For 循环的更多相关文章
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- 模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...
- 【JS基础】循环
for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- To Java程序员:切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- .NET基础 一步步 一幕幕[循环、逻辑语句块]
循环.逻辑语句块 好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...
- Linux进程管理及while循环
目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...
随机推荐
- ctfhub技能树—RCE—过滤cat
打开靶机 查看页面信息 构造payload 127.0.0.1 || ls 题目提示过滤了cat,但我还是想试试 果然不行 网页访问没有结果,应该和上题一样被注释了,使用和同样的方法进行解题 利用命令 ...
- 【七天搞定Python】day01.Python环境配置、pip、IDE、注释、变量,数据类型、标识符/关键字、输出、输入
什么是Python? 动态解释型语言,1982年由荷兰人Guido von Rossum发明. 更多细节可以google,这里不做展开. Python解释器: CPython(官方版本C语言实现) I ...
- Genymotion虚拟机用键盘输入中文
genymotion我用的版本是3.0.4,安卓内核版本从4到9都进行了尝试,尤其是教新的版本原生是不带中文输入法的. 前提:安装Genymotion以后,想要随意安装app,需要先安装Genymot ...
- Ajax中的同源政策
Ajax中的同源政策 Ajax请求限制 Ajax只能向自己的服务器发送请求.比如现在有一个A网站.有一个B网站,A网站中的HTML文件只能向A网站服务器中发送Ajax请求,B网站中的HTML文件只能向 ...
- Angular入门到精通系列教程(14)- Angular 编译打包 & Docker发布
目录 1. 概要 2. 编译打包 2.1. 基本打包命令 2.2. 打包部署到二级目录 3. Angular站点的发布 3.1. web服务器发布 3.2. 使用docker发布 4. 总结 环境: ...
- Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
Optimistic concurrency control https://en.wikipedia.org/wiki/Optimistic_concurrency_control Optimist ...
- worker 启动时向 etcd 注册自己的信息,并设置一个带 TTL 的租约,每隔一段时间更新这个 TTL,如果该 worker 挂掉了,这个 TTL 就会 expire 并删除相应的 key。
1.通过etcd中的选主机制,我们实现了服务的高可用.同时利用systemd对etcd本身进行了保活,只要etcd服务所在的机器没有宕机,进程就具备了容灾性. https://mp.weixin.qq ...
- Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制
拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...
- vim自动添加C C++ sh文件头
set foldenable set foldmethod=manual set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 set ...
- ifndef /define/ endif 作用和用法
问题:ifndef/define/endif"主要目的是防止头文件的重复包含和编译====================================================== ...