31、shell循环

一、循环

循环:循环是一种重复执行一段代码的结构。只要满足循环的条件,会一直执行这个代码。

循环条件:在一定范围之内,按照指定的次数来执行循环。

循环体:在指定的次数内,执行的命令序列。只要条件满足,循环体会被一直执行。

循环和遍历:

遍历值得就是对数据结构中每个元素进行一次访问的过程。通常和循环一起使用。

访问的目的:就是为了执行特定的操作

循环是操作

遍历就是输出

1.1、循环的作用:

1、重复执行代码,尤其是统一的,相同的,批量的操作。

2、提高代码的重复利用率。

3、提高人工的效率,减少人工的干预,提高效率。

4、简化程序的逻辑,降低代码出错的可能性。

二、for循环

for循环:已知循环次数的场景。

while循环:和for循环可以通用,常用于死循环

until:条件不满足才执行循环,条件不满足,不执行。

for循环的格式:

格式1

for 变量名称 (前面没有$) in 范围 {}

for 变量名称 (前面没有$) in 范围 {}

do

​ 命令序列

done

[root@localhost opt]# vim test11.shfor i in {1..17}
doecho $i
done[root@localhost opt]# sh test11.sh
1
2
3
4
#现在创建一个文件passwd.txt
#在文件中创建三行,xy101  xy102  xy103
#使用循环创建这个三个用户,统一密码为123456.
[root@localhost opt]# vim passwd.txt
[root@localhost opt]# vim test12.shfor user in $(cat /opt/passwd.txt)
douseradd $userecho 123456 | passwd --stdin $user
done[root@localhost opt]# sh test12.sh
更改用户 xy101 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“xy102”已存在
更改用户 xy102 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 xy103 的密码 。
passwd:所有的身份验证令牌已经成功更新。

在这里插入图片描述

在这里插入图片描述

格式2:类c语言格式:

for ((表达式1;表达式2;表达式3))

for ((表达式1;表达式2;表达式3))

do

命令序列

done

for ((i=0;i<=5;i++))

表达式1:定义变量并且赋予初始值

表达式2:循环的范围

表达式3:循环的方式,循环一次自增1

#累加求和?1-100一直相加,最后的结果

[root@localhost opt]# vim test13.sh#累加求和?1-100一直相加,最后的结果
sum=0
for ((i=0;i<=100;i++))
dosum=$(($sum+$i))
done
echo $sum[root@localhost opt]# sh test13.sh
5050
[root@localhost opt]# vim test13.sh#累加求和?1-100一直相加,最后的结果
#分别求出奇数和以及偶数和
sum1=0
sum2=0
for ((i=0;i<=100;i++))
doif [[ $i%2 -eq 0 ]]thensum1=$(($sum1+$i))elsesum2=$(($sum2+$i))fi
done
echo $sum1
echo $sum2[root@localhost opt]# sh test13.sh
2550
2500
[root@localhost opt]# vim test14.sh#累加求和?1-100一直相加,最后的结果
#分别求出奇数和以及偶数和
read -p "输入一个0-100之间的随机数:" a
sum1=0
for ((i=1;i<=$a;i++))
dosum1=$(($sum1+$i))
done
echo $sum1[root@localhost opt]# vim test14.sh
[root@localhost opt]# sh test14.sh
输入一个0-100之间的随机数:34
595
[root@localhost opt]# sh test14.sh
输入一个0-100之间的随机数:100
5050

格式3:死循环

死循环

for((;😉)

do

命令序列

done

在这里插入图片描述

#break:在循环内部,执行到break命令时,会立即跳出当前循环,并

在这里插入图片描述

#continue:把执行到contiune时,跳出当前循环,但是如果循环条件依然满足,>
会执行后续的循环条件。

在这里插入图片描述

在这里插入图片描述

[root@localhost opt]# vim test14.sha=$((RANDOM%10+1))
for ((i=1;;i++))
do
read -p "输入0-10数字" bif [[ $b -gt $a ]]thenecho "猜大了"elif [[ $b -lt $a ]]thenecho "猜小了"elseecho "猜对了,猜了$i次"breakfi
done[root@localhost opt]# sh test14.sh
输入0-10数字5
猜大了
输入0-10数字6
猜大了
输入0-10数字7
猜大了
输入0-10数字3
猜大了
输入0-10数字2
猜对了,猜了5次

作业:
例题:购物
逛淘宝选购商品,
每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),
每次选购完或不买都会提示用户是否继续逛下一家商店,
如果不再继续逛的话进行购物车结算总额。.

[root@localhost opt]# vim test15.sha=500
b=400
c=300
d=150
e=50
sum=0
read -p "是否进入这家店" h
if [[ $h == yes ]]
then
echo "进入这家店"
fi
for ((;;))
dofor ((;;))doecho "a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元"read -p "加入购物车" isum=$(($sum+$i))read -p "是否结束加入购物车" kif [[ $k == yes ]]thenecho "完成加入购物车"echo "$sum"breakfi
doneread -p "是否购买yes/no" jif [[ $j == yes ]]thenecho "$sum"echo "是否继续逛下一家"elseecho "是否继续逛下一家"fi
break
done[root@localhost opt]# sh test15.sh
是否进入这家店ys
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车^C
[root@localhost opt]# sh test15.sh
是否进入这家店yes
进入这家店
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车a
是否结束加入购物车no
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车a
是否结束加入购物车no
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车b
是否结束加入购物车yes
完成加入购物车
1400
是否购买yes/noyes
1400
是否继续逛下一家
[root@localhost opt]# sh test15.sh
是否进入这家店yes
进入这家店
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车a
是否结束加入购物车no
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车c
是否结束加入购物车no
a:衣服500元,b:裤子400元,c:鞋子300元,d:帽子150元,e:袜子50元
加入购物车d
是否结束加入购物车yes
完成加入购物车
950
是否购买yes/nono
是否继续逛下一家

作业2:某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,
又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。
依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,
请问这只猴子在第一天总共摘了多少根香蕉?

[root@localhost opt]# vim test17.sha=1
for ((day=1;day<10;day++))
doa=$(((a+1)*2))
done
echo "第一天猴子总共摘了$a根香蕉"[root@localhost opt]# sh test17.sh
第一天猴子总共摘了1534根香蕉

ono
是否继续逛下一家

作业2:某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,
又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。
依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,
请问这只猴子在第一天总共摘了多少根香蕉?

[root@localhost opt]# vim test17.sh

a=1
for ((day=1;day<10;day++))
do
a= ( ( ( a + 1 ) ∗ 2 ) ) d o n e e c h o " 第一天猴子总共摘了 (((a+1)*2)) done echo "第一天猴子总共摘了 (((a+1)2))doneecho"第一天猴子总共摘了a根香蕉"

[root@localhost opt]# sh test17.sh
第一天猴子总共摘了1534根香蕉


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

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

相关文章

力扣42 接雨水

听说字节每人都会接雨水&#xff0c;我也要会哈哈哈 数据结构&#xff1a;数组 算法&#xff1a;核心是计算这一列接到多少雨水&#xff0c;它取决于它左边的最大值和右边的最大值&#xff0c;如下图第三根柱子能接到的雨水应该是第一根柱子高度和第五根柱子高度的最小值减去第…

DDei在线设计器-属性编辑器

DDei-Core-属性编辑器 DDei-Core-属性编辑器插件包含了文本、大文本、数值、下拉、单选、勾选以及颜色等属性编辑。 图形和属性共同构成一个完整的定义&#xff0c;属性编辑器就是编辑属性值的控件。当选中图形实例时&#xff0c;属性面板就会展现当前实例的所有属性以及属性编…

qt仿制qq登录界面

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {// 设置窗口大小this->resize(window_width, window_heigth);// 固定窗口大小this->setFixedSize(window_width, window_heigth);// 设置窗口图标this->se…

怎么学习汇川Codesys PLC教程?

前言 各位好&#xff0c;我在B站和抖音上都有发布视频的&#xff0c;搜索我的名称“阿凡工控分享”即可。在CSDN上发表文章也是想把我的一点见解和经验分享出来&#xff0c;进一步的方便大家进行学习。 我是正文 本文主要也是为了方便大家学习汇川的Codesys PLC而制作的&…

登录/注册- 滑动拼图验证码(IOS/Swift)

本章介绍如何使用ios开发出滑动拼图验证码&#xff0c;分别OC代码和swift代码调用 1.导入项目model文件OC代码&#xff08;下载完整Demo&#xff09; 2.放入你需要显示的图片 一&#xff1a;OC调用 #import "ViewController.h" #import "CodeView.h"…

讯飞有一个可以根据描述文本自动生成PPT的AI接口,有趣

文档&#xff1a;https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度&#xff0c;生成一次是10点&#xff0c;正好100次&#xff0c;如果要购买的话最低要购买1344元的&#xff0c;没有按量付费的模式&#xff0c;个人小开发者可买不起。 让我…

【简单介绍下Sass,什么是Sass?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

波拉西亚战记加速器 台服波拉西亚战记免费加速器

波拉西亚战记是一款新上线的MMORPG游戏&#xff0c;游戏内我们有多个角色职业可以选择&#xff0c;可以体验不同的战斗流派玩法&#xff0c;开放式的地图设计&#xff0c;玩家可以自由的进行探索冒险&#xff0c;寻找各种物资。各种随机事件可以触发&#xff0c;让玩家的冒险过…

LabVIEW缝缺陷图像标注库

LabVIEW缝缺陷图像标注库 开发了一个基于LabVIEW平台构建的船舶焊缝缺陷图像标注库。该库旨在通过高效和简洁的方式处理和标注船舶焊缝缺陷图像&#xff0c;提高缺陷识别的准确性和效率&#xff0c;进而保障船舶的结构安全。 项目背景 在船舶制造过程中&#xff0c;焊接质量…

MFC实现子控件focus焦点上下移动父控件ListView和Gridview也跟着向上下移动

项目中要实现mfc功能&#xff0c;然后子控件焦点下移&#xff0c;LIstView和Gridview父控件不会下移&#xff0c;所以就有这个文章。废话不多说直接上代码。 MFCGridView.java import android.content.Context; import android.util.AttributeSet; import android.view.View;…

精益生产VS六西格玛:一场管理领域的精彩较量

精益生产与六西格玛&#xff0c;犹如管理学的双璧&#xff0c;各具魅力又相得益彰。精益生产&#xff0c;如同一位巧夺天工的工匠&#xff0c;专注于消除生产中的浪费&#xff0c;以极简为美。它旨在通过减少库存、缩短生产周期、提升产品质量等手段&#xff0c;使生产过程更加…

Centos离线安装Python3

目录 1.准备工作 2.解压python压缩包 3.编译 4.安装、更改环境变量 5.建立pip连接 使用的是Centos7服务器&#xff0c;Py版本是py3.9.0 1.准备工作 首先确保服务器中存在相关的编译器&#xff0c;例如GCC&#xff1b;这里不做过多叙述&#xff0c;需要者前往&#xff1a…

(几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。

(几何:六边形面积)编写程序&#xff0c;提示用户输入六边形的边长&#xff0c;然后显示它的面积。计 算六边形面积的公式是: 这里的s就是边长。下面是一个运行示例 package myjava; import java.math.*; import java.util.Scanner; public class cy {public static void main(S…

python的a[:2]、a[:] 和a [::] 的区别

一、a[:2] 数据准备 import numpy as np X np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) print(X)形成矩阵 print (“X[: 2]:”, X[: 2]) ### :表示索引 0至1行&#xff1b; 二、a[:]和a [::] 在 Python 中&#xff0c;[:] 和 [::…

【QT5】<总览五> QT多线程、TCP/UDP

文章目录 前言 一、QThread多线程 二、QT中的TCP编程 1. TCP简介 2. 服务端程序编写 3. 客户端程序编写 4. 服务端与客户端测试 三、QT中的UDP编程 1. UDP简介 2. UDP单播与广播程序 前言 承接【QT5】&#xff1c;总览四&#xff1e; QT常见绘图、图表及动画。若存在…

高速直线导轨驱动与控制,精准稳定的运动核心元件

直线导轨在工业生产中&#xff0c;精度和稳定性是至关重要的。而在各种机械设备中&#xff0c;高精度直线导轨是提高设备运动控制精度和平稳性的核心部件&#xff0c;当我们考虑高速运动时&#xff0c;直线导轨的精度和稳定性是非常重要的因素。 直线导轨系统中如何确保高速运动…

电脑自带录屏在哪?电脑录屏,4个详细方法

在现代社会中&#xff0c;越来越多的人需要在电脑上录制视频&#xff0c;比如录制游戏操作、制作教学视频、演示文稿等等。因此&#xff0c;电脑录屏成为了一项非常重要的功能。那么电脑自带录屏在哪&#xff1f;本文将带领大家看看可以使用哪些方法进行录屏。 录屏方法一&…

linux中: IDEA 由于JVM 设置内存过小,导致打开项目闪退问题

1. 找到idea安装目录 由于无法打开idea&#xff0c;只能找到idea安装目录 在linux(debian/ubuntu)中idea的插件默认安装位置和配置文件在哪里? 默认路径&#xff1a; /home/当前用户名/.config/JetBrains/IntelliJIdea2020.具体版本号/options2. 找到jvm配置文件 IDEA安装…

【Gitlab】Gitlab MAC M1通过Docker Desktop安装教程

目录 一、拉取镜像 二、配置容器 2.1 配置Volumes 2.2 配置Gitlab 2.3 配置完成&#xff0c;重启GitLab容器 2.4 查看GitLab的root密码 三、brew安装gitlab 3.1 安装命令 3.2 启动命令 参考资料 一、拉取镜像 docker pull yrzr/gitlab-ce-arm64v8 二、配置容器 2.1 …

设计模式——建造者模式(生成器模式)

建造者模式(生成器模式) 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示的意图 用了建造者模式&#xff0c;那么用户就只需要指定需要构建的类型就可以得到它们&#xff0c;而具体构造的细节和过程不需要知道 概括地说&#xff0c;Bu…