【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/bashfor((i=1;i<=3;i++))
dofor((j=1;j<=3;j++))doif [ $j -eq 2 ]then
#	continue
#	breakexitelseecho j=$jfidone
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/bashfor((i=10;i>=0;i--))
dofor((j=1;j<=i;j++))doecho -e "*\c"done
echo
done

3.5 九九乘法表

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

3.6 猜价格

#!/bin/bash
com=`echo $[RANDOM%1000+1]`  ##机器产生的随机数
t=0while 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,不在线显示用户不在线

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3中v-for报错 ‘item‘ is of type ‘unknown‘

报错 在写vue3ts的项目&#xff0c;得到一个数组&#xff0c;需要循环展示&#xff0c;使用v-for循环&#xff0c;写完之后发现有个报错&#xff0c;如下&#xff1a; 解决 props的时候使用PropType将数据类型完整标注即可 以为没有显示的表示出list中item的类型&#xff…

企业如何选择一款高效的ETL工具

企业如何选择一款高效的ETL工具? 在企业发展至一定规模后&#xff0c;构建数据仓库&#xff08;Data Warehouse&#xff09;和商业智能&#xff08;BI&#xff09;系统成为重要举措。在这个过程中&#xff0c;选择一款易于使用且功能强大的ETL平台至关重要&#xff0c;因为数…

three.js学习总结超详细附带素材及源码

three.js学习总结超详细附带素材及源码 安装three.js npm install --save three引入three.js import * as THREE from threethree.js结构 three.js坐标 创建一个场景 scene场景&#xff0c;camera相机&#xff0c;renderer渲染器 创建一个场景 this.scene new THREE.Scene(…

SMBGhost_RCE漏洞(CVE-2020-0796永恒之黑)

https://blog.csdn.net/qq_45372008/article/details/106980409 https://zhuanlan.zhihu.com/p/374949632 SMB 3.1.1协议处理某些请求的方式中存在远程执行代码漏洞&#xff0c;可能被攻击者利用远程执行任意代码。该漏洞的后果十分接近永恒之蓝系列&#xff0c;都利用Windows …

日本it就职培训机构,日本IT行业的三种类型

日本的IT产业一直保持增长趋势&#xff0c;市场规模逐年增加&#xff0c;在日本所有产业中占据很大比例。由于日本老龄化严重&#xff0c;日本国内的IT人才无法满足需求&#xff0c;为缓解这一问题&#xff0c;日本将引进外国优秀IT人才作为一项国策&#xff0c;日本IT行业不仅…

数字化时代的政务服务:构建便捷高效的线上政务大厅

引言&#xff1a; 随着数字化时代的来临&#xff0c;如何通过线上政务大厅搭建一个便捷高效的服务平台&#xff0c;以更好地满足公众需求值得探究。线上政务大厅是政务服务的新方式&#xff0c;但搭建线上政务大厅并不是一件容易的事情&#xff0c;需要精心的规划和设计。 一…

NX二次开发UF_CAM_set_auto_blank 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_set_auto_blank Defined in: uf_cam.h int UF_CAM_set_auto_blank(tag_t object_tag, UF_CAM_blank_geom_type_t geom_type, double offset [ 6 ] ) overview 概述 Define …

单链表在线OJ题二(详解+图解)

1.在一个排序的链表中&#xff0c;存在重复的结点&#xff0c;请删除该链表中重复的结点&#xff0c;重复的结点不保留&#xff0c;返回链表头指针 本题的意思是要删除链表中重复出现的节点&#xff0c;然后返回删除重复节点后的链表。 我们可以直接用一个哨兵位以便于观察链表…

ultralytics yolov8 实例分割 训练自有数据集

参考: https://docs.ultralytics.com/datasets/segment/coco/ http://www.bryh.cn/a/613333.html 1、数据下载与转换yolo格式 1)数据集下载: 参考:https://universe.roboflow.com/naumov-igor-segmentation/car-segmetarion 下载的是coco格式,需要转换 2)coco2yolo t…

2023感恩节大促:跨境卖家如何借助海外网红营销赢得市场关注

随着全球贸易的日益发展&#xff0c;跨境电商行业变得愈发竞争激烈&#xff0c;各家卖家纷纷寻找新的营销策略以在大促期间脱颖而出。在2023年感恩节即将来临之际&#xff0c;海外网红营销成为许多卖家关注的热点。本文Nox聚星将和大家探讨跨境卖家如何充分利用海外网红营销&am…

视频云存储EasyCVR平台国标接入获取通道设备未回复是什么原因?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【正点原子STM32连载】第五十六章 DSP BasicMath实验 摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html## 第五…