当前位置: 首页 > news >正文

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 循环类型】

文章目录

  • 一、Shell 循环类型
  • 二、Shell while 循环
  • 三、Shell for 循环
  • 四、Shell until 循环
  • 五、Shell select 循环
  • 六、总结


在这里插入图片描述

一、Shell 循环类型

循环是一个强大的编程工具,使您能够重复执行一组命令。在本教程中,您将学习以下类型的循环 Shell 程序:

  • while 循环
  • for 循环
  • until 循环
  • select 循环

你会根据不同情况使用不同的循环。例如用 while 循环执行命令,直到给定的条件下是 ture ,循环直到执行到一个给定的条件为 false

有良好的编程习惯,将开始使用情况的基础上适当的循环。这里 whilefor 循环类似在大多数其他的编程语言,如C,C++ 和 Perl 等。

语法:

while command1 ; # this is loop1, the outer loop
doStatement(s) to be executed if command1 is truewhile command2 ; # this is loop2, the inner loopdoStatement(s) to be executed if command2 is truedoneStatement(s) to be executed if command1 is true
done

嵌套的 while 循环和类似的方式,可以嵌套其他循环的基础上的编程要求下面是一个例子:

例子: 这里是循环嵌套一个简单的例子,让我们添加另一个倒计时循环内的循环,数到九:

#!/bin/sha=0
while [ "$a" -lt 10 ]    # this is loop1
dob="$a"while [ "$b" -ge 0 ]  # this is loop2doecho -n "$b "b=`expr $b - 1`doneechoa=`expr $a + 1`
done

这将产生以下结果。

0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

注意:重要的是要注意 echo -n 是如何工作。在这里,-n 选项 echo ,以避免打印一个新行字符。

二、Shell while 循环

while 循环,使您能够重复执行一组命令,直到某些条件发生。它通常用于当你需要反复操纵的变量值。

语法:

while command
doStatement(s) to be executed if command is true
done

这里 Shell 命令进行计算。如果结果值是 true,给定语句被执行。如果命令为 false,那么没有语句将不执行,程序将跳转到 done 语句后的下一行。

例子:
下面是一个简单的例子,使用 while 循环显示数字 0到9

#!/bin/sha=0while [ $a -lt 10 ]
doecho $aa=`expr $a + 1`
done

这将产生以下结果:

0
1
2
3
4
5
6
7
8
9

解析: 每一次执行这个循环,变量 a 进行检查,看该值是否小于10。如果 a 的值小于10,此测试条件的退出状态为0。在这种情况下,当前值的将显示,然后按1递增。

三、Shell for 循环

循环操作项目清单。重复一组命令列表中的每个项目。

语法:

for var in word1 word2 ... wordN
doStatement(s) to be executed for every word.
done

解析:
var 是一个变量,word1 到 wordN 是由空格分隔的字符(字)序列的名称。每次for 循环的执行,变量 var 的值被设置为下一个单词的列表中的字,word1 到 wordN 。

例子:
下面是一个简单的例子,它使用 for 循环跨越通过给定的数字列表:

#!/bin/shfor var in 0 1 2 3 4 5 6 7 8 9
doecho $var
done

这将产生以下结果:

0
1
2
3
4
5
6
7
8
9

下面的例子显示所有文件开始 .bashhome 目录。执行这个脚本:

#!/bin/shfor FILE in $HOME/.bash*
doecho $FILE
done

这将产生以下结果:

/root/.bash_history
/root/.bash_logout
/root/.bash_profile
/root/.bashrc

四、Shell until 循环

完美的情况下,你需要执行的一组命令某个条件为真时,while 循环执行。有时候,你需要执行一组命令,直到某个条件为真。

语法:

until command
doStatement(s) to be executed until command is true
done

解析: 这里 Shell 命令进行评估计算。如果结果值是 false ,给定语句(s)被执行。如果命令没有语句为 true ,那么将不执行,程序会跳转到下一行 done 语句后。

例子:
下面是一个简单的例子,它使用直到循环显示数字0到9:

#!/bin/sha=0until [ ! $a -lt 10 ]
doecho $aa=`expr $a + 1`
done

这将产生以下结果:

0
1
2
3
4
5
6
7
8
9

五、Shell select 循环

select 循环提供了一个简单的方法来创建一个编号的菜单,用户可从中选择。它是有用的,当你需要从列表中选择,要求用户选择一个或多个项目。
语法:

select var in word1 word2 ... wordN
doStatement(s) to be executed for every word.
done

解析:
var 是一个变量,word1 到 wordN是由空格分隔的字符(字)序列的名称。每次for循环的执行,变量 var 的值被设置为下一个单词的列表中的字,由 word1 到wordN。

对于每一个选择的一组命令将被执行,在循环中。这个循环在 ksh,并已被改编成的 bash 。这不是在 sh

例子:
下面是一个简单的例子,让用户选择的首选饮品:

#!/bin/kshselect DRINK in tea cofee water juice appe all none
docase $DRINK intea|cofee|water|all) echo "Go to canteen";;juice|appe)echo "Available at home";;none) break ;;*) echo "ERROR: Invalid selection" ;;esac
done

select 循环的菜单看起来像下面这样:

$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
#? juice
Available at home
#? none
$

您可以更改显示的提示选择循环通过改变变量 PS3 如下:

$PS3="Please make a selection => " ; export PS3
$./test.sh
1) tea
2) cofee
3) water
4) juice
5) appe
6) all
7) none
Please make a selection => juice
Available at home
Please make a selection => none
$

六、总结

关于Shell 循环类型基本和其他语言大差不差,还差一个 循环控制 break/continue 放到下一篇单独介绍吧。


在这里插入图片描述

相关文章:

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 循环类型】

文章目录 一、Shell 循环类型二、Shell while 循环三、Shell for 循环四、Shell until 循环五、Shell select 循环六、总结 一、Shell 循环类型 循环是一个强大的编程工具,使您能够重复执行一组命令。在本教程中,您将学习以下类型的循环 Shell 程序&…...

WAWA鱼2024年终总结,关键词:成长

前言 本来想着偷懒一下,不写2024年终总结了,因为24年上半年还在忙毕业,下半年在忙转正,其实没什么太多好写的。结果被an_da和学弟催更了,哈哈哈,感谢大家对我近况的关注,学校内容基本都忘的差不…...

【Redis】hash 类型的介绍和常用命令

1. 介绍 Redis 中存储的 key-value 本身就是哈希表的结构,存储的 value 也可以是一个哈希表的结构 这里每一个 key 对应的一个 哈希类型用 field-value 来表示 2. 常用命令 命令 介绍 时间复杂度 hset key field value 用于设置哈希表 key 中字段 field 的值为…...

二分基础两道

Leetcode704: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出:…...

Skyeye 云 VUE 版本 v3.15.7 发布

Skyeye 云智能制造,采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...

位运算和操作符属性

位运算和操作符属性 除了课件中提到的那几种应用,其他时候一般先不考虑用这个原反补码 printf("%d\n,017")打印出来则是15 printf("%d\n,0017")打印出来也是15 printf("%d\n,0x017")打印出来是23eg:2进制转换为32进制则每5个2进制位…...

php的使用及 phpstorm环境部署

php语法 环境搭建:在小皮中新建网站,注意先填写域名再点击选择根目录。 成功创建网站后,打开发现forbidden,因为新建的网站里是空的,需要新建index.php文件----> 在Phpstorm中左上角打开文件,打开那个文…...

高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池

目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单,我们首先聊一聊线程池的定义: 线程池(Thread Pool) 是一种并发编程的设计模式,用于管理和复用多个线程…...

Jupyterlab和notebook修改文件的默认存放路径的方法

文章目录 1.缘由2.操作流程2.1找到默认的路径2.2创建配置文件2.3修改配置文件内容2.4注意事项 1.缘由 我自己使用jupyterlab的时候,打开是在这个浏览器上面打开的,但是这个打开的文件路径显示的是C盘上面路径,所以这个就很麻烦,因…...

吴恩达深度学习——有效运作神经网络

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习所用。 文章目录 训练集、验证集、测试集偏差、方差正则化正则化参数为什么正则化可以减少过拟合Dropout正则化Inverted Dropout其他的正则化方法数据增广Early stopping 归一化梯度消失与梯度爆…...

享元模式——C++实现

目录 1. 享元模式简介 2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象,降低内存消耗。共享对象相同的部分,避免创建大量相同的对象,减少内存占用。 享元模式需要将对象分成内部状态和外部状态两个部分…...

【Go语言圣经】第五节:函数

第五章:函数 5.1 函数声明 和其它语言类似,Golang 的函数声明包括函数名、形参列表、返回值列表(可省略)以及函数体: func name(parameter-list) (result-list) {/* ... Body ... */ }需要注意的是,函数…...

win32汇编环境,窗口程序中使用进度条控件

;运行效果 ;win32汇编环境,窗口程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10&am…...

Vscode的AI插件 —— Cline

简介 vscode的一款AI辅助吃插件,主要用来辅助创建和编辑文件,探索大型项目,使用浏览器并执行终端命令(需要多个tokens),可以使用模型上下文协议(MCP)来创建新工具并扩展自己(比较慢…...

Flink (十三) :Table API 与 DataStream API 的转换 (一)

Table API 和 DataStream API 在定义数据处理管道时同样重要。DataStream API 提供了流处理的基本操作(即时间、状态和数据流管理),并且是一个相对低级的命令式编程 API。而 Table API 抽象了许多内部实现,提供了一个结构化和声明…...

Android --- handler详解

handler 理解 handler 是一套Android 消息传递机制,主要用于线程间通信。 tips: binder/socket 用于进程间通信。 参考: Android 进程间通信-CSDN博客 handler 就是主线程在起了一个子线程,子线程运行并生成message ,l…...

[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率

Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...

关于贪心学习的文笔记录

贪心,顾名思义就是越贪越好,越多越有易,他给我的感觉是,通常是求最大或最小问题,相比于动态规划贪心让人更加琢磨不透,不易看出方法,为此在这记录我所见过的题型和思维方法,以便回头…...

SLAM技术栈 ——《视觉SLAM十四讲》学习笔记(一)

《视觉SLAM十四讲》学习笔记(一) 第2讲 初识SLAM习题部分 第3讲 三维空间刚体运动3.1 左手系与右手系3.2 齐次坐标3.3 旋转矩阵与变换矩阵3.4 正交群与欧式群3.5 旋转向量与欧拉角3.6 实践Eigen线性代数库3.6.1 QR分解(QR decomposition) 3.7 四元数到其…...

【ChatGPT:开启人工智能新纪元】

一、ChatGPT 是什么 最近,ChatGPT 可是火得一塌糊涂,不管是在科技圈、媒体界,还是咱们普通人的日常聊天里,都能听到它的大名。好多人都在讨论,这 ChatGPT 到底是个啥 “神器”,能让大家这么着迷?今天咱就好好唠唠。 ChatGPT,全称是 Chat Generative Pre-trained Trans…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...