Linux之shell循环
华子目录
- for循环
- 带列表的for循环
- 格式
- 分析
- 示例
- shell允许用户指定for语句的步长,格式如下
- 示例
- 不带列表的for循环
- 示例
- 基于C语言风格的for循环
- 格式
- 示例
- 注意
- while循环
- 格式
- 示例
- until循环
- 作用
- 格式
- 示例
- 循环控制
- break
- continue
- 详细语法
- 示例
- 循环嵌套
- 示例
for循环
- for循环是最简单,也是最常用的循环语句。与其他的程序设计语言一样,for循环都是初学者在学习循环结构时的入门课程。for循环通常用于遍历整个对象或者数字列表。按照循环条件的不同,for循环语句可以分为带列表的for循环、不带列表的for循环以及类C风格的for循环。本节将介绍这3种不同的for循环结构。
带列表的for循环
格式
for 循环变量 in {list}
dostatement1statement2...
done
分析
- variable称为循环变量
- list是一个列表,可以是一系列的数字或者字符串,元素之间使用空格隔开
- do和done之间的所有的语句称为循环体,即循环结构中重复执行的语句
- 执行时,Shell会将in关键字后面的list列表的第1个元素的值赋给变量variable,然后执行循环体,当循环体中的语句执行完毕之后剩余以此类推,当list列表中的所有的元素都被访问后,for循环结构终止,程序将继续执行done语句后面的其他的语句
示例
[root@server ~]# vim for1.sh
#!/bin/bash
for ip in 192.168.80.129 192.168.80.130
doecho $ip
done[root@server ~]# bash for1.sh
192.168.80.129
192.168.80.130
[root@server ~]# vim for2.sh
#!/bin/bash
for ip in 192.168.80.{120..140..1} # 使用{start..end..step} 进行扩展
doecho $ip
done[root@server ~]# bash for2.sh
192.168.80.120
192.168.80.121
192.168.80.122
192.168.80.123
192.168.80.124
192.168.80.125
192.168.80.126
192.168.80.127
192.168.80.128
192.168.80.129
192.168.80.130
192.168.80.131
192.168.80.132
192.168.80.133
192.168.80.134
192.168.80.135
192.168.80.136
192.168.80.137
192.168.80.138
192.168.80.139
192.168.80.140
- 获取指定目录下的所有目录的文件名
[root@server ~]# vim for3.sh
#!/bin/bash
for file in $(ls -F / | grep "/$")
doecho $file | cut -d "/" -f1
done# ls -F :用于将目录内的文件按照文件类型进行归类显示,会在不同类别的文件名尾部增加不同的标识符,目录以/结尾、链接文件以@结尾、可执行文件以*结尾、普通文件无符号
# grep "/$" :表示过滤以/结尾的行[root@server ~]# bash for3.sh
afs
boot
dev
etc
home
media
mnt
opt
proc
root
run
srv
sys
tmp
usr
var
shell允许用户指定for语句的步长,格式如下
for variable in {start..end..step}
dostatement1statement2...
done
示例
- 例3:计算1+2+3+4+5+……+100和
[root@server ~]# bash for4.sh
#!/bin/bash
sum=0
for i in {1..100..1}
do((sum=$sum+$i))
done
echo "sum=$sum"[root@server ~]# bash for4.sh
sum=5050
# 上例修改
[root@server ~]# bash for4.sh
#!/bin/bash
sum=0
for i in $(seq 100)
do((sum=$sum+$i))
done
echo "sum=$sum"[root@server ~]# bash for4.sh
sum=5050
不带列表的for循环
- 原则:for不提供循环列表,shell将从命令行(相当于以位置参数的形式传入循环列表)获取循环列表数据及条件,格式:
for variable
dostatement1statement2...
done
- 由于系统变量$@可以获取所有位置参数,以上的语法等价于:
for variable in $@或$*
dostatement1statement2...
done
示例
[root@server ~]# vim for5.sh
#!/bin/bash
for arg
do echo $arg
done [root@server ~]# bash for5.sh {1..10..2}
1
3
5
7
9
基于C语言风格的for循环
格式
for ((初始化;条件表达式;步长)) # 注意:2个圆括号
dostatement1statement2...
done
示例
- 面试题,批量创建账户
[root@server ~]# vim for6.sh
#!/bin/bash
for((i=1;i<=10;i++))
doif ! id -u temp$i &> /dev/nullthenuseradd temp$iecho "123456" | passwd --stdin temp$i &> /dev/nullelseecho "temp$i 账户已存在"fi
done [root@server ~]# bash for6.sh
[root@server ~]# id temp1
用户id=1001(temp1) 组id=1001(temp1) 组=1001(temp1)
注意
i++表示置后自增,++i置前自增
[root@server ~]# x=1
[root@server ~]# y=2
[root@server ~]# echo $((x++))
1
[root@server ~]# echo $x
2
[root@server ~]# echo $((++y))
3
[root@server ~]# echo $y
3
while循环
格式
while expression
dostatement1statement1……
done
- 上例语法中,expression表示条件表达式,循环必须满足该表达式,否则循环结束,可以是任何符合语法的shell命令,但推荐书写测试表达式
示例
- while循环读取文件
# 法1 ,采用exec读取文件
[root@server ~]# vim file1.txt
data1
data2
data3
data4
data5
[root@server ~]# vim while1.sh
#!/bin/bash
exec < file1.txt
while read a
doecho $a
done
# exec < file1.txt 将file.txt文件内容读入到标准输入中
# read a 表示从标准输入中按照行读取内容到变量a[root@server ~]# bash while1.sh
data1
data2
data3
data4
data5
# 法2:使用cat读取文件,通过管道符进入while循环处理
cat 文件名 | while read line
do statement1statement1……
done
#法3 : 在while循环尾部使用输入重定向指定输入数据
while read line
dostatement1statement1……
done < 文件名
- 猜商品价格,通过变量RANDOM获取随机整数并控制20以内,提示用户猜测商品价格,猜测时需要记录次数,猜中后退出程序
[root@server ~]# vim while2.sh
#!/bin/bash
price=$[ $RANDOM%20 ]
count=0
while true
doread -p "请输入[0-20]间的商品价格: " INTlet count++if(($INT==$price))thenecho "恭喜,你猜中!"echo "你使用了$count次机会"exit 0elif (($INT>$price))thenecho "你输入的商品价格高了!"elseecho "你输入的商品价格低了!"fi
done[root@server ~]# bash while2.sh
请输入[0-20]间的商品价格:10
你输入的商品价格高了
请输入[0-20]间的商品价格:5
你输入的商品价格高了
请输入[0-20]间的商品价格:3
你输入的商品价格高了
请输入[0-20]间的商品价格:2
你输入的商品价格高了
请输入[0-20]间的商品价格:1
你输入的商品价格高了
请输入[0-20]间的商品价格:0
恭喜,你猜中了
你使用了6次机会
until循环
作用
- until循环不断地重复执行循环中的语句,直至某个条件成立,与while循环的执行条件相反
格式
until expreession
dostatement1statement2……
done
示例
[root@server ~]# vim while3.sh
# while3.sh 的改写
#!/bin/bash
i=1
until [ $i -gt 10 ] # i>10 ,注意,条件要相反
doif id -u temp$i &> /dev/nullthenuserdel -r test$ielseecho "test$i 账户已删除"filet i++
done
循环控制
break
break: 是立即跳出某个循环结构。break语句可以用在for、while或者until等循环语句的循环体中
continue
continue: 作用不是退出循环体。而是跳过当前循环体中该语句后面的语句,重新从循环语句开始的位置执行
详细语法
示例
- 判断素数
[root@server ~]# vim for7.sh
#!/bin/bash
read -p "请输入一个正整数: " prime
if ((prime<2))
thenecho "数据错误,请输入大于等于2的正整数!"
else for ((i=2;i<prime;i++))do if ((prime%i==0))then echo "平数"breakfi done if ((i==prime))then echo "素数"fi
fi
- 计算100到150之间不能被3整除的数,输出时一行显示5个
[root@server ~]# bash for8.sh
#!/bin/bash
count=0
for((i=100;i<150;i++))
doif ((i%3==0))thencontinuefiecho -ne "$i\t"((count++))if ((count%5==0))thenechofi
done
echo
循环嵌套
示例
- 九九乘法表
[root@server ~]# bash for9.sh
#!/bin/bash
for i in $(seq 9)
dofor j in $(seq 9)do((j<=i)) && echo -ne "$i*$j=`echo $((i*j))` \t"doneecho
done
- 打印三角形
[root@server ~]# bash for10.sh
#!/bin/bash
read -p "请输入图形行数:" h
for ((i=0;i<h;i++)) # 循环处理h行
dofor ((j=0;j<h-i;j++)) # 每行打印一些空格doecho -n " "donefor ((k=0;k<2*i+1;k++)) # 每行打印一些星号doecho -n "*"doneecho # 每行最后打印一个\n
done
- 打印数字三角形
[root@server ~]# bash for11.sh
#!/bin/bash
for ((i=1;i<10;i++))
dofor ((j=1;j<=10-i;j++))doecho -n " "donefor ((k=1;k<=i;k++))doecho -n "$i"doneecho
done
相关文章:

Linux之shell循环
华子目录 for循环带列表的for循环格式分析示例shell允许用户指定for语句的步长,格式如下示例 不带列表的for循环示例 基于C语言风格的for循环格式示例注意 while循环格式示例 until循环作用格式示例 循环控制breakcontinue详细语法示例 循环嵌套示例 for循环 for循…...
Python入门教程(一)|基本语法概述
目录 1. 注释 2. 变量和数据类型 3. 控制流 4. 函数 5. 类与对象 6. 异常处理 7. 模块和包 8. 文件操作 1. 注释 在Python中,单行注释以#开始,多行注释使用三个引号 """ 或 。 # 这是单行注释""" 这是 多行 注释…...

Android Studio入门——页面跳转
1.工程目录 2.MainActivity package com.example.demo01;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCo…...

肝了三天,完成了AIGC工具网站大全,建议收藏再看
说是肝了三天,其实远远不止,前前后后,从资料搜集到最后整理成文,有近一个月了,大家看在整理不易的份上,给点个赞吧,不要光顾着收藏呀! 国内网站 AIGC 导航 https://www.aigc.cn 网…...

算法练习:前缀和
目录 1. 一维前缀和2. 二维前缀和3. 寻找数组中心下标4. 除自身以外数组的乘积5. !和为k的子数字6. !和可被k整除的子数组7. !连续数组8. 矩阵区域和 1. 一维前缀和 题目信息: 题目链接: 一维前缀和思路:求前缀和数组,sum dp[r] …...

Kafka MQ 生产者
Kafka MQ 生产者 生产者概览 尽管生产者 API 使用起来很简单,但消息的发送过程还是有点复杂的。图 3-1 展示了向 Kafka 发送消息的主要步骤。 我们从创建一个 ProducerRecord 对象开始,ProducerRecord 对象需要包含目标主题和要发送的内容。我们还可以…...

SQLiteC/C++接口详细介绍之sqlite3类(十)
返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C接口详细介绍之sqlite3类(九) 下一篇:SQLiteC/C接口详细介绍之sqlite3类(十一) 30.sqlite3_enable_load_extension&#x…...
Vue中nextTick一文详解
什么是 nextTick? 在 Vue 中,当我们修改数据时,Vue 会自动更新视图。但是,由于 JavaScript 的事件循环机制,我们无法立即得知视图更新完成的时机。这时候,我们就需要使用 nextTick 来获取视图更新完成后的…...

爱奇艺 CTR 场景下的 GPU 推理性能优化
01 背景介绍 GPU 目前大量应用在了爱奇艺深度学习平台上。GPU 拥有成百上千个处理核心,能够并行的执行大量指令,非常适合用来做深度学习相关的计算。在 CV(计算机视觉),NLP(自然语言处理)的模型…...

详解MySql索引
目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大,且…...
struct 和 union 的区别?
struct和union的分对应点总结 存储方式: struct:struct中的每个成员都拥有独立的内存空间。一个struct变量的总长度是其所有成员的长度之和,且通常会根据编译器的内存对齐规则进行适当调整。union:union中的所有成员共享同一段内…...

Linux - 安装 Jenkins(详细教程)
目录 前言一、简介二、安装前准备三、下载与安装四、配置镜像地址五、启动与关闭六、常用插件的安装 前言 虽然说网上有很多关于 Jenkins 安装的教程,但是大部分都不够详细,或者是需要搭配 docker 或者 k8s 等进行安装,对于新手小白而已&…...

【JAVA】JAVA方法的学习和创造
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| 💫个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…...

Rust写一个wasm入门并在rspack和vite项目中使用(一)
rust打包wasm文档 文档地址 安装cargo-generate cargo install cargo-generate 安装过程中有问题的话手动安装cargo-generate下载地址 根据自己的系统下载压缩包,然后解压到用户/.cargo/bind目录下,将解压后的文件放到该目录下即可。 创建wasm项目 …...
HTTP和HTTPS的区别,HTTPS加密原理是?
HTTP和HTTPS都是网络传输协议,主要用于浏览器和服务器之间的数据传输,但它们在数据传输的安全性、加密方式、端口等方面有所不同。 数据传输的安全性:HTTP是明文传输,数据不加密,容易被黑客窃听、篡改或者伪造&#x…...

基于Spring Boot+Vue的校园二手交易平台
目录 一、 绪论1.1 开发背景1.2 系统开发平台1.3 系统开发环境 二、需求分析2.1 问题分析2.2 系统可行性分析2.2.1 技术可行性2.2.2 操作可行性 2.3 系统需求分析2.3.1 学生功能需求2.3.2 管理员功能需求2.3.3游客功能需求 三、系统设计3.1 功能结构图3.2 E-R模型3.3 数据库设计…...
什么是软件开发?软件开发阶段划分是什么?并以LabVIEW为例进行说明
软件开发是一种创建、设计、编码、测试和维护应用程序、框架或其他软件组件的过程。它涉及从理解需求到设计、实现、测试、部署和最终维护的全过程。软件开发可以用来创建新的软件应用、系统软件、游戏、或开发网络应用等。 软件开发过程通常可以分为以下几个阶段:…...

PTAL1-006 连续因子
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...

【Java】容器|Set、List、Map及常用API
目录 一、概述 二、List 1、List的常用API 2、ArrayList 3、List遍历 三、Set 1、Set的常用方法: 2、HashSet 3、遍历集合: 四、Map 1、Map常用API 2、HashMap 3、遍历Map 五、迭代器 一、概述 在Java中所有的容器都属于Collection接口下的内容 1…...

Navicat 面试题及答案整理,最新面试题
Navicat 在数据库管理中的主要用途有哪些? Navicat 是一款数据库管理工具,其主要用途包括: 1、多数据库支持: Navicat 支持多种数据库连接,包括 MySQL、Oracle、PostgreSQL、SQLite、SQL Server 等,方便用…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...