SHELL中的循环语句

news2024/11/16 7:45:18

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

循环结构

连续出现的功能性代码

shell循环有四种:

  • while 条件成立,循环就开始 直到循环条件不满足或者跳出结构为止

  • until 和while循环恰恰相反 条件不成立 循环开始 ;条件成立 循环结束

  • for

  • select

while 和 for 较为常用

while

主要用于程序的后台运行,需要持续运行的守护进程
while是一个循环语句,在某个条件为真的情况下重复执行特定的代码块。在shell中,while语句通常用于重复执行一系列命令,直到某个条件不再成立。

while [ 条件表达式 ]
	do
		代码
done
-------------------------------------
if [ 条件表达式 ]
	then
		代码
fi

在这里插入图片描述

案例演示:
#!/bin/bash
num=1
while [ "$num" -lt 10 ]
    do
       uptime >> /baizhi/uptime2.log # 打印系统的负载
        sleep 3 #休眠三秒继续执行
        ((num=num+1))
done
###
	指令 & ## 将进程放到后台运行
例如:
	bash load1.sh &
###
	fg jobId   #将指定进程拉回到前台
例如:
	fg 1
jobs -l ## 查看后台正在运行的进程
例如:
	[1]+ 2165 运行中 bash load1.sh &
## 计算 1+2+3+4+...+99+100
#! /bin/bash
sum=0
num=1
while [ $num -le 100 ]
	do
		((sum=sum+num))
		((num++))
done
# echo 是打印技术内容以后自动换行
echo "1~100的和为: $sum"
printf "1~100的和为:$sum \n"  # printf  默认不换行  \n---换行符
printf指令
printf 在脚本中应用的比 echo 更广泛 ----- 可移植性强
语法:
	printf 格式 展示的数据
printf使用文本或者空格分隔参数,也可以使用格式化字符串 还可以指定字符串的宽度,左右对其的方式
默认不换行 想换行 可以手动添加特殊字符 \n --- 换行符
##参数
	%s 格式替换符 输出一个字符串
	%c 格式替换符 输出一个字符
	%d 格式替换符 整型输出
	%f 格式替换符 输出小数
%-10s 指一个宽度为10的字符 (- 表示左对齐 没有则表示右对齐) 任何字符都会被显示在10个字符的宽度内
如果内容不够10个字符,使用空格填充 若内容超过10个字符 超过也会将内容显示出来(格式会乱)
%-4.1f 指格式化小数 其中 %-4 代表左对齐 显示在4个字符的宽度内 .1 是指小数点后保留一位
until

不满足条件,执行 ; 满足条件跳出循环结构
until是一个流程控制结构,它在执行一系列命令之前重复执行一个命令,直到该命令的退出状态为真(0)为止。

[root@centos-128 abc]# cat until.sh
#! /bin/bash
num=1
until [ $num -gt 10 ]
    do
        echo "HelloWorld"
        ((num++))
done

在这里插入图片描述

for
写法 1:
for 变量 in 变量取值的列表
	do
		代码
done
执行流程:
	变量代表分别获取每个值 值取完了 结构退出
写法2:
	for ((expr1;expr2;expr3))
	for ((变量初始化定义;设置变量的取值范围;变量递增递减))
类似于C语言
	for(int i=0;i<=10;i++)
案例:
# 打印1-10
方法一:
#! /bin/bash
for var in 1 2 3 4 5 6 7 8 9 10
	do
		echo $var
done
方法二:
for var in {1..10}
	do
		echo $var
done
方法三:
for var in `seq 10`
	do
	echo $var
done

## 计算 1+2+3+4+...+99+100

sum=0
for var in {1..100}
	do
		((sum=var+sum))
done
echo "1~100的和为 $sum"
# 打印1-10
for ((num=1;num<=10;num++))
	do
		echo $num
done

## 列出某个目录下的文件
#! /bin/bash
for file in `ls /baizhi`
	do
	echo $file
done
## 列出某个文件夹下所有的文件(包含子文件夹内部的文件)
[root@centos-128 abc]# cat for1.sh
#!/bin/bash
function file_list(){
for file in `ls $1`
    do
        if [ -f "$file" ]
            then
                echo "$1/$file"
        else
            file_list "$1/$file"
        fi
done
}
file_list $1
循环控制
中断循环:
办法1:
	循环条件不满足
办法2:
	break 中断循环
	continue 直接中断本次循环,进入下一次
	exit 退出脚本,退出当前shell
	return 用在函数中 结束函数的作用
break

break 关键字 break n [n代表跳出的循环层数]

[root@centos-128 abc]# cat break.sh
#!/bin/bash
for i in {1..10}
    do
        if [ $i -le 6 ]
            then
                echo "HelloWorld   $i"
        else
            break
        fi
done

#! /bin/bash
for var in {1..10} # 外层循环
	do
		echo "外层循环的执行"
		for tmp in {1..10}
			do
				if [ $tmp -le 6 ]
					then
						printf "$tmp "
				else
					break 2 ## 跳出第二层循环
				fi
		done
		printf "\n"
done

执行结果:
[root@baizhi baizhi]# bash break2.sh
外层循环的执行
1 2 3 4 5 6
continue

contine 跳过本次循环,直接进入下一次循环

[root@centos-128 abc]# cat continue.sh
#! /bin/bash
for i in {1..10}
    do
        if [ $i -eq 6 ]
            then
                continue
        else
            echo "HelloWorld  $i"
        fi
done

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cp: can‘t stat ‘/usr/share/zoneinfo/Asia/Shanghai‘: No such file or directory

目录 问题描述问题分析解决方案容器时区验证 问题描述 使用下面的 Dockerfile 为 youlai-boot 项目制作镜像设置容器时区报错。 # 基础镜像 FROM openjdk:17-jdk-alpine # 时区修改 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo Asia/Sha…

动 态 规 划

一、&#xff08;what&#xff1f;&#xff09; 二、&#xff08;why&#xff1f;&#xff09; 三、&#xff08;how&#xff1f;&#xff09; 四、典型例题分析&#xff1a; 例题1&#xff1a;神奇的兔子序列 输入&#xff1a;月数 输出&#xff1a;兔子数 思路&#xff1…

计算机视觉的应用18-一键抠图人像与更换背景的项目应用,可扩展批量抠图与背景替换

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用18-一键抠图人像与更换背景的项目应用&#xff0c;可扩展批量抠图与背景替换。该项目能够让你轻松地处理和编辑图片。这个项目的核心功能是一键抠图和更换背景。这个项目能够自动识别图片中的主体&…

Apache Airflow (九) :Airflow Operators及案例之BashOperator及调度Shell命令及脚本

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

手机LiDAR-based激光雷达标定板提高无人汽车智能化程度

手机LiDAR-based 3D扫描和建模测试系统是一种利用激光雷达&#xff08;LiDAR&#xff09;技术进行三维扫描和模型创建的工具&#xff0c;它可以在手机上运行。这种测试系统可以用于各种应用&#xff0c;如地形测绘、建筑物建模、机器人视觉、无人驾驶汽车导航等。 手机LiDAR-ba…

【Linux网络编程】高级I/O

目录 五种I/O模型 阻塞和非阻塞 非阻塞I/O I/O多路复用之Select、Poll、与Epoll 本文目的是深入浅出理解高级I/O相关的知识&#xff0c;结尾附上代码加深理解相关知识。 五种I/O模型 1.阻塞I/O&#xff1a;在内核将数据准备好之前&#xff0c;系统调用会一直等待。所有的套…

CTFHub | Cookie注入,UA注入,Refer注入,过滤空格(利用hackbar插件)

Cookie注入 Cookie 注入原理 Cookie 注入的原理也和其他注入一样&#xff0c;只不过是将提交的参数以 Cookie 方式提交&#xff0c;而一般的注入是使用 GET 或者 POST 方式提交&#xff0c;GET 方式提交就是直接在网址后面加上需要注入的语句&#xff0c;POST 方式则是通过表单…

【计算机基础】优雅的PPT就应该这样设计

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

【Java SE】继承

学习完了类之后&#xff0c;我们将继续学习一个Java中的重点内容“继承” 继承 1.1 为什么需要继承 举例&#xff1a; 在Cat类中和Dog类中我们发现有很多一样的地方&#xff0c;这样写太浪费空间和内存了 我们可以把它相同的地方都用一个类来表示&#xff0c;并且使用它1.2 继…

PCL 半径滤波剔除噪点(二)

目录 一、算法原理二、注意事项三、代码实现一、算法原理 PCL半径滤波是删除在输入的点云一定范围内没有达到足够多领域的所有数据点。通俗的讲:就是以一个点p给定一个范围r,领域点要求的个数为m,r若在这个点的r范围内部的个数大于m则保留,小于m则删除。因此,使用该算法时…

【MATLAB源码-第82期】基于matlab的OFDM系统载波频移偏差(CFO)估计,对比三种不同的方法。

操作环境&#xff1a; MATLAB 2013b 1、算法描述 正交频分复用&#xff08;OFDM&#xff09;系统中的载波频率偏移&#xff08;CFO&#xff09;估计是一项关键技术&#xff0c;用于确保数据传输的准确性和效率。CFO通常由于振荡器频率不匹配和多普勒频移引起。不同的CFO估计…

Docker Volume: 实现容器间数据共享与持久化的利器

文章目录 Docker Volume的作用Docker Volume与容器内数据的比较优势劣势 Docker Volume的创建和管理创建Docker Volume管理Docker Volume 演示Docker Volume的挂载Docker Volume的生命周期安全性考虑与Docker Volume应用场景Docker Volume与多容器协作容器迁移与Docker Volume未…

电子学会2023年6月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(二级) 一、单选题(共25题,共50分) 1. 运行下列哪段程序,可以让狗狗走到木屋门口?( ) A.

vite vue3安装element-plus

准备 参考 安装 官网 yarn add element-plus完整引入 如果你对打包后的文件大小不是很在乎&#xff0c;那么使用完整导入会更方便。 main.ts // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import…

数据资产到底如何入表?

2024年1月1日起&#xff0c;财政部《企业数据资源相关会计处理暂行规定》正式施行&#xff0c;距离现在只有一个多月的时间。 数据资源入表意味着企业可以将数据资源确认为企业资产负债表中“资产”一项。对于拥有丰富数据资源的企业来说&#xff0c;有望在财务报表中体现其真…

C++软件开发面试场景题

自己在秋招过程中遇到的一些场景题 海量数据N取Top K个元素&#xff0c;复杂度是多少 在处理海量数据中获取前K个元素&#xff08;Top K&#xff09;的问题中&#xff0c;通常会使用一些高效的算法来减少时间和空间复杂度。以下是两种常见的解决方案和它们的复杂度&#xff1…

VS中修改解决方案名称和项目名称

如何修改visual studio2019中的项目名 - 知乎 (zhihu.com) 查了很多&#xff0c;还是这个可行。虽然文中说不是最简单的&#xff0c;但在所查找资料中是可行且最简单的。 要点主要是&#xff1a; 1、比如我们复制一个解决方案&#xff0c;最好是带代码哈&#xff0c;也就是添…

Python 爬虫入门

文章目录 Python 爬虫入门requests 库beautifulsoup4库函数findall()&#xff0c;find()函数get() 爬虫实例 1&#xff1a;抓小说爬虫实例 2&#xff1a;抓豆瓣 top 250 的电影信息后记 Python 爬虫入门 Python 的爬虫功能使得程序员可以快速抓取并分析网页中的信息&#xff0…

【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Nacos 一、nacos实现配置管理1.1 统一配置管…

C#WPF用户控件及自定义控件实例

本文演示C#WPF自定义控件实例 用户控件(UserControl)和自定义控件(CustomControl)都是对UI控件的一种封装方式,目的都是实现封装后控件的重用。 只不过各自封装的实现方式和使用的场景上存在差异。 1 基于UserControl 创建 创建控件最简单一个方法就是基于UserControl …