【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循环

##第一种语法
for i in {词语列表}
do
命令序列
done

##第二种语法
for((i=1;i<=100;i++))
do
命令序列
done

2.2  while循环

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

2.3  until循环

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

2.4  死循环

while的死循环
while true        ##永远是真,那么已知执行循环
while :           ##永远是真,那么已知执行循环
while [ 1 -eq 1 ] ##永远是真,那么已知执行循环

until的死循环
until false       ##永远是假的,那么已知执行
until [ 1 -eq 0 ] ##永远是假的,那么已知执行循环

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

#!/bin/bash

for((i=1;i<=3;i++))
do
	for((j=1;j<=3;j++))
	do
	if [ $j -eq 2 ]
	then
#	continue
#	break
	exit
	else
	echo j=$j
	fi
	done
echo ------------------
done

三、实操案例

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

##第一种办法,使用for循环
suma=0
for i in {1..100}
do
suma=$[suma+i]
done
echo sum1=${suma}

##第二种办法,还是使用for循环
sumb=0
for((j=0;j<=100;j++))
do
let sumb+=$j
done
echo sum2=${sumb}

##第三种办法,使用while循环
sumc=0
n=0
while [ $n -le 100 ]
do
sumc=`expr ${sumc} + $n`
let n++
done
echo sum3=${sumc}

##第四种方法,使用until语句
sumd=0
x=0
until [ $x -gt 100 ]
do
sumd=$((${sumd}+${x}))
let x+=1
done
echo sum4=${sumd}

##第五种办法,使用seq和bc计算
sume=$(seq -s+ 100|bc)
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 批量修改文件名称

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

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

 

#!/bin/bash
ip=$(ifconfig ens33|grep netmask|awk '{print $2}') ##提取本机的ip地址
net=${ip%.*}.  ##提取本机的网段
end=254
for((i=3;i<="${end}";i++))   ##设置循环条件从3到254循环
do
{
ping -c2 -W1 ${net}${i} &>/dev/null  ##使用ping检测主机是否存活
if [ $? -eq 0 ]   ##能ping通则是0,ping不通是非0
then
echo ${net}${i} >>/xh/alive  ##将存活的主机记录在文件中
fi
}&  ##并行运行,可以大大提高脚本的执行速度
done
wait  ##这个很重要,让主机能够把新文件/xh/alive文件存留下来

n=`cat /xh/alive|wc -l`   ##统计文本的行数即为主机的数量
echo "你一共有${n}台主机存活"

3.4 直角三角形

#!/bin/bash

for((i=10;i>=0;i--))
do
	for((j=1;j<=i;j++))
	do
	echo -e "*\c"
	done
echo
done

3.5 九九乘法表

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

3.6 猜价格

#!/bin/bash
com=`echo $[RANDOM%1000+1]`  ##机器产生的随机数
t=0

while true
do
read -p "请输入你猜的价格(1-1000):" price  ##人类输入的价格数字
let t++  ##统计猜的次数
if [ ${com} -eq ${price} ]
then
echo "恭喜你猜对了,实际价格为${price},你一共猜了${t}次"
exit
elif [ ${com} -gt ${price} ]
then
echo "不好意思,你猜低了"
else
echo "猜高了,便宜点"
fi
done

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/177694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

yapi==使用依赖包里的类作为入参/返回值导出后没有备注

比如模块A中有个MyDemoEntity类,在B中以依赖的形式引入了A,并在B的接口中以MyDemoEntity作为返回值,导出到YAPI发现MyDemoEntity的备注没了。 解决: 将A的内容安装到本地MAVEN仓库,并且需要将源码也一起安装 <build><resources><resource><director…

记录--手写一个 v-tooltip 指令

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 日常开发中&#xff0c;我们经常遇到过tooltip这种需求。文字溢出、产品文案、描述说明等等&#xff0c;每次都需要写一大串代码&#xff0c;那么有没有一种简单的方式呢&#xff0c;这回我们用指…

第一百七十六回 如何创建渐变色边角

文章目录 1. 概念介绍2. 实现方法3. 代码与细节3.1 示例代码3.2 代码细节 4. 内容总结 我们在上一章回中介绍了"如何创建放射形状渐变背景"相关的内容&#xff0c;本章回中将介绍"如何创建渐变色边角".闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

Axios使用方式

ajax是JQUERY封装的XMLHttprequest用来发送http请求 Axios简单点说它就是一个js库,支持ajax请求,发送axios请求功能更加丰富,丰富在哪不知道 1.npm使用方式 vue项目中 npm install axios 2.cdn方式 <script src"https://unpkg.com/axios/dist/axios.min.js">…

行情分析——加密货币市场大盘走势(11.22)

大饼昨日晚上打了止损&#xff0c;笔者入场了空单&#xff0c;目前来看上涨乏力&#xff0c;下跌是必然的&#xff0c;昨日的下跌跌破了蓝色上涨趋势线&#xff0c;而今日白天开始反弹&#xff0c;别着急抄底&#xff0c;下跌还没有结束。 空单策略&#xff1a;入场36500 止盈…

为UE和Unity开发者准备的Godot指南

为UE和Unity开发者准备的Godot指南 ——两位大哥打架&#xff0c;请带上我 这两天游戏行业又开始热闹了&#xff0c;昨天两条信息直接刷爆朋友圈&#xff0c;最大的两家游戏引擎公司怼起来了。 《为Unity开发者准备的虚幻引擎指南》&#xff1a; 为Unity开发者准备的虚幻引擎指…

Autocad2020切换经典界面

Autocad2020切换经典界面 1.更改1.1设置另存为 1.更改 1.1设置另存为

SQL语句执行过程

一条 SQL 的执行过程可以大致分为以下几个步骤&#xff1a; 连接器&#xff1a; ○ 客户端与数据库建立连接&#xff0c;并发送 SQL 语句给数据库服务。 ○ 连接器验证客户端的身份和权限&#xff0c;确保用户有足够的权限执行该 SQL 语句。查询缓存&#xff1a; ○ 连接器首先…

Redis面试内容,Redis过期策略,Redis持久化方式,缓存穿透、缓存击穿和缓存雪崩,以及解决办法

文章目录 一、redis什么是RedisRedis使用场景1、缓存2、数据共享[分布式](https://so.csdn.net/so/search?q分布式&spm1001.2101.3001.7020)3、分布式锁4、全局ID5、计数器6、限流7、位统计 Redis有5中数据类型&#xff1a; SSHLZRedis中一个key的值每天12点过期&#xff…

编码的发展历史

编码的发展历史 ASCII&#xff1a; ASCII编码使用7位二进制数表示一个字符&#xff0c;范围从0到127。每个字符都有一个唯一的ASCII码值与之对应。例如&#xff0c;大写字母"A"的ASCII码是65&#xff0c;小写字母"a"的ASCII码是97。 ASCII字符集包括英文…

【python基础】python可变序列与不可变序列

文章目录 前言一、序列类型定义二、对序列类型的切片操作三、使用 与 * 对序进行操作四、增量赋值 和 * 前言 本文主要讲可变序列与不可变序列一些简单的应用。 一、序列类型定义 按序列能否被修改分为&#xff1a;可变序列与不可变序列。 可变序列&#xff1a;可以进行增、…

短期风速预测|LSTM|ELM|批处理(matlab代码)

1主要内容 该程序是预测类的基础性代码&#xff0c;程序对河北某地区的气象数据进行详细统计&#xff0c;程序最终得到pm2.5的预测结果&#xff0c;通过更改数据很容易得到风速预测结果。程序主要分为三部分&#xff0c;分别是基于LSTM算法、基于ELM算法和基于LSTM和批处理组合…

vivado产生报告阅读分析15-时序报告11

Report Clock Domain Crossings “ Clock Domain Crossings (CDC) ” &#xff08; 时钟域交汇 &#xff09; 报告可对设计中的时钟域交汇执行结构分析。此信息可用于识别潜在不安全的 CDC &#xff0c; 此类 CDC 可能导致亚稳态或数据一致性问题。虽然 CDC 报告与“ Clock …

2023年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主…

LongAccumulator

原子操作之LongAccumulator 和LongAdder的区别在于&#xff0c;LongAdder是在Cell里面只能做加减操作&#xff0c;不能乘除&#xff0c;而LongAccumulator就可以定义乘除操作。原理和LongAdder都是一样的&#xff0c;一个Base和一个Cells数组。 原文跳转地址

基于docker实现JMeter分布式压测

为什么需要分布式&#xff1f; 在工作中经常需要对一些关键接口做高QPS的压测&#xff0c;JMeter是由Java 语言开发&#xff0c;没创建一个线程&#xff08;虚拟用户&#xff09;&#xff0c;JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并…

prometheus热更新失败failed to reload config

一、问题描述 k8s部署的prometheus服务在请求热更新时报错: failed to reload config: one or more errors occurred while applying the new configuration (--config.file"/etc/prom/config/file/prometheus.yml")请求命令:curl -X POST http://monitor-cp-prom:…

【Delphi】开发IOS 程序,TLabel 中英文字对齐(水平),一行代码解决显示对齐问题!

目录 一、问题现象&#xff1a; 二、解决方案&#xff08;一行代码解决ios对齐问题&#xff09;&#xff1a; 三、解决后效果&#xff1a; 四、后记&#xff1a; 一、问题现象&#xff1a; 在用 Delphi 开发ios程序时&#xff0c;使用TLabel控件显示&#xff0c;会出现中英…

Epub书籍阅读工具

Epub书籍阅读工具 前言WIndows总结Neat ReaderAquile ReaderWPS Android总结Neat Reader掌阅 前言 Epub文件为电子书文件格式&#xff0c;此格式的电子书相比txt书籍&#xff0c;增加了目录跳转功能&#xff0c;并可以显示图片。本文介绍WIndows和Android端的epub书籍阅读工具…

如何做好项目管理?年薪百万项目大佬一直在用这11张图

大家好&#xff0c;我是老原。 日常工作中&#xff0c;我们会遇到各种大大小小的工作项目&#xff0c;如何能让项目保质保量的完成&#xff0c;是我们项目经理的目标。 项目管理的流程可以说是由一系列的子过程组成的&#xff0c;它是一个循序渐进的过程&#xff0c;所以不能…