Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 循环类型】
文章目录
- 一、Shell 循环类型
- 二、Shell while 循环
- 三、Shell for 循环
- 四、Shell until 循环
- 五、Shell select 循环
- 六、总结
一、Shell 循环类型
循环是一个强大的编程工具,使您能够重复执行一组命令。在本教程中,您将学习以下类型的循环 Shell
程序:
- while 循环
- for 循环
- until 循环
- select 循环
你会根据不同情况使用不同的循环。例如用 while
循环执行命令,直到给定的条件下是 ture
,循环直到执行到一个给定的条件为 false
。
有良好的编程习惯,将开始使用情况的基础上适当的循环。这里 while
和 for
循环类似在大多数其他的编程语言,如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
下面的例子显示所有文件开始 .bash
在 home
目录。执行这个脚本:
#!/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…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...