Linux shell编程学习笔记19:until循环语句

news2024/11/28 11:48:07

Linux shell编程中的until语句,在功能上与其它编程语言一致,但在结构与其它编程语言又不太一样。在大多数编程语言中,until语句的循环条件表达式一般位于循环体语句的后面,但是在Linux shell编程中,until语句的循环条件表达式与for语句和while一样,位于循环体语句的前面。

一、数字条件循环类

我们继续以for循环语句和while循环语句中的例子,计算 从1到10与2的乘积 并输出。 

(一)在zsh命令行成功执行

# csdn @ edu in ~ [20:26:26] 
$ i=1; until [ ! $i -le 10 ]; do echo "$i * 2 = $(expr $i \* 2)"; i=$(expr $i + 1); done 
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20

# csdn @ edu in ~ [20:27:06] 

(二)在bash命令行成功执行

# csdn @ edu in ~ [20:27:06] 
$ exec bash
[csdn ~]$ i=1; until [ ! $i -le 10 ]; do echo "$i * 2 = $(expr $i \* 2)"; i=$(expr $i + 1); done
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8
5 * 2 = 10
6 * 2 = 12
7 * 2 = 14
8 * 2 = 16
9 * 2 = 18
10 * 2 = 20
[csdn ~]$ 

二、字符条件循环类

我们使用的实例跟前面探讨的while循环语句中的一样,先定义字符串s=abcd0,初始化循环变量i,然后从i开始截取字符串s值并输出,直到截取的字符串为0时结束循环。

(一)在bash中执行成功

[csdn ~]$ s=abcd0; i=0; until [[ ! ${s:i} != '0' ]] ; do echo ${s:i}; let i++; done
abcd0
bcd0
cd0
d0
[csdn ~]$ 

(二)在zsh命令行执行不成功

# csdn @ edu in ~ [22:36:44] 
$ s=abcd0; i=1; until [[ ! ${s:i} != '0' ]] ; do echo ${s:i}; let i++; done
zsh: unrecognized modifier `i'

 

与while循环语句一样,这个实例也在zsh命令行同样执行不成功。

三、无限循环

与for语句、while语句一样, until语句也可以实现无限循环。

下面的实例跟前面探讨的while循环语句中的一样,我们用无限循环每隔30秒显示提示信息 press Ctrl+C to exit,在用户按下Ctrl+C后结束循环。

(一)用false作为循环条件表达式

1.在zsh命令行执行成功 

# csdn @ edu in ~ [22:48:08] 
$ until false; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
^C%                                                                                                                                                          

# csdn @ edu in ~ [22:49:49] C:130

 

2.在bash命令行执行成功 

[csdn ~]$ until false; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
^C
[csdn ~]$ 

 

(二)用 ! : 作为循环条件表达式

1.在zsh命令行执行成功 

# csdn @ edu in ~ [22:49:49] C:130
$ until ! : ; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
press Ctrl+C to exit
^C%                                                                                                                                                          

# csdn @ edu in ~ [22:55:55] C:130

2.在bash命令行执行成功 

[csdn ~]$ until ! : ; do echo 'press Ctrl+C to exit'; sleep 30s; done
press Ctrl+C to exit
^C
[csdn ~]$ 

四、总结

至此我们学习了Linux shell编程中的for、while、until三个循环语句,相对来说,for语句格式更灵活,比如支持 in 表达试,所以应用也相对更广泛。

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

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

相关文章

教您如何去除照片上的水印!

许多网友都在寻找方法去除照片上的水印,水印通常用于保护版权或标识来源,但有时候我们可能需要使用带有水印的照片,却又不希望水印影响观感,今天我将向大家介绍两种有效的方法,帮助解决“如何去除照片上的水印”这一难…

从内存管理的角度来看,Python语言的变量和参数传递情况解析

从内存管理的角度来看,Python语言的变量和参数传递情况解析 概述 从内存管理的角度来看,Python中的变量和参数传递有一些特点: ☆ 变量是对象的引用:在Python中,变量实际上是对象的引用,而不是对象本身。…

Mysql数据库 7.SQL语言 关联关系

关联关系介绍 Mysql是一个关系型数据库,不仅可以存储数据,还可以维护数据与数据之间的关系——通过在数据表中添加字段建立约束 数据与数据之间的关联关系: 1.一对一关联 2.一对多关联 3.多对一关联 4.多对多关联 一个表的外键对应另一…

2023年【道路运输企业主要负责人】考试技巧及道路运输企业主要负责人复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年【道路运输企业主要负责人】考试技巧及道路运输企业主要负责人复审模拟考试,包含道路运输企业主要负责人考试技巧答案和解析及道路运输企业主要负责人复审模拟考试练习。安全生产模拟考试一点通结合…

leetcode:1446. 连续字符(python3解法)

难度:简单 给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。 请你返回字符串 s 的 能量。 示例 1: 输入:s "leetcode" 输出:2 解释:子字符串 &q…

虹科资讯 | 10月智能制造行业动态回顾

文章来源:虹科工业控制 阅读原文:https://mp.weixin.qq.com/s/0jR_QgmR6tmrRoTFAo8mFw 10月,虹科与PLCopen合作开展IEC 61131-3培训,目前正在火热报名中;人工智能领域的迅猛发展引起了智能制造业的广泛关注&#xff…

Flink1.18新特性生产环境应用的重点解读!

大家好,我是你们的群主王知无呀。 Flink 1.18已经于近期发布了。在这个新版本中新增了很多新的功能和特性。在这些特性中,有一些是生产环境非常重要的能力,大家在使用过程中可以重点参考和了解其中的原理。 算子级别状态保留时间TTL设置 首先…

CSS3媒体查询与页面自适应

2017年9月,W3C发布媒体查询(Media Query Level 4)候选推荐标准规范,它扩展了已经发布的媒体查询的功能。该规范用于CSS的media规则,可以为文档设定特定条件的样式,也可以用于HTML、JavaScript等语言。 1、媒体查询基础 媒体查询…

苹果AirTag平替产品选择,国内外支持苹果Find My芯片功耗全面对比

2021年4月20,苹果在春季产品发布会上推出了全新的产品类型- AirTag,将哆啦A梦的追踪徽章带到了现实。这个小产品当年并没有像其它苹果新品那样一朝爆红。随着年轮缓缓而坚定地前行, AirTag也缓缓而坚定地前行,并被越来越多的人接受和喜欢。 深入思考AirTag背后的产品逻辑和实现…

双11价格博弈之下,电商大战走向何方?

第十五个双11,电商平台内卷越发激烈。 10月18日,短视频平台快手迫不及待地打响第一枪,随后拼多多、淘宝天猫、京东纷纷启动双11。 不过,和以往不同的是,今年双11是随着“高端商战”一起拉开帷幕的。从京东采销喊话头…

Web安全系列——注入攻击

文章首发公众号: 海天二路搬砖工 前言 在Web应用程序开发中,防SQL注入最基本的安全防护要求了。其实除了SQL注入, 还有很多其他的注入攻击方式。注入攻击是最常见的Web应用攻击方式之一。 本文将介绍注入攻击的概念、种类、原理&#xff0…

删除链表的倒数第n个节点(C++解法)

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&#…

Linux 服务器 Oracle19C安装

原文:【精选】Oracle | CentOS7安装Oracle19c数据库(RPM包)_oracle-database-preinstall-19c-1.0-1.el7.x86_64.rp_Thorolds Deer的博客-CSDN博客 下载 第一个软件包:Oracle Database 19c Download for Linux x86-64 第二个包:Oracle Linux 7 (x86_64) Latest | Oracle,…

【Springboot】集成Swagger

引入依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> 浏览器 启动项目后 在浏览器中输入地址 localhost:端口号/swagger-ui/ 使…

Android各版本对应的SDK及JDK版本要求

1、Android Gradle 插件版本说明 | Android 开发者 | Android Developers 2、 3、Android Gradle 插件 7.3.0&#xff08;2022 年 9 月&#xff09; | Android 开发者 | Android Developers 4、 5、参考 Android中Gradle版本和Gradle插件版本 - 简书

深度学习实战:基于TensorFlow与OpenCV的手语识别系统

文章目录 写在前面基于TensorFlow与OpenCV的手语识别系统安装环境一、导入工具库二、导入数据集三、数据预处理四、训练模型基于CNN基于LeNet5基于ResNet50 五、模型预测基于OpenCV 写在后面 写在前面 本期内容&#xff1a;基于TensorFlow与OpenCV的手语识别系统 实验环境&…

物联网AI MicroPython传感器学习 之 MFRC522 RFID射频IC卡感应模块

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 MFRC522是应用于13.56MHz非接触式通信中高集成度的读写卡芯片&#xff0c;其特点低电压、低成本、体积小的非接触式读写芯片。MFRC522支持MIFARE系列更高速的非接触式通信&#xff0c;双向数据…

如何理解傅里叶变换?

当提到什么是傅里叶变换&#xff1f; 大家的回答一般是&#xff1a;将信号从时域转化到频域&#xff1f; 那为什么要转换到频域呢&#xff1f; 因为在频域可将一些信号分离。 为什么转换到频域就可分离呢&#xff1f;好像不会回答了。 实际上&#xff0c;从线性代数的角度…

Spring面试题:(二)基于xml方式的Spring配置

xml配置Bean的常见属性 id属性 name属性 scope属性 lazy-init属性 init-method属性和destroy属性 initializingBean方法 Bean实例化方式 ApplicationContext底层调用BeanFactory创建Bean&#xff0c;BeanFactory可以利用反射机制调用构造方法实例化Bean&#xff0c;也可采用工…

【嵌入式开发学习】__改了一行代码,数组遍历耗时从10.3秒降到了0.5秒!

目录 前言 两个简单的测试程序 1. array1.c 对数组按行进行访问 2. array2.c 对数组按列进行访问 ​编辑 3. 编译运行&#xff0c;并用 time 命令统计一下运行时间&#xff1a; 重要说明 存储金字塔 局部性原理 1. 时间局部性 2. 空间局部性 高速缓存 - Cache Cache…