bash for循环_Bash 中的 For 循环

c1be46f0c899970e68deeb0273c80365.png

循环是编程语言的基本概念之一。当你想要一遍又一遍地运行一系列命令直到达到某个条件后终止退出时,循环很方便。

在诸如 Bash 之类的脚本语言中,循环对于自动执行重复性任务非常有用。

在 Bash 脚本中有3个基本的循环结构,for 循环, while 循环,until 循环。

在本教程中,我们将介绍 Bash 中 for 循环的基础知识以及用于改变循环流的 break 和 continue 语句。

标准 Bash for 循环

for 循环遍历项列表并执行给定的命令集。

Bash for 循环采用以下形式:

for item in [LIST]do [COMMANDS]done

列表可以是由空格分隔的一系列字符串,一系列数字,命令输出,数组等。

循环遍历字符串

在下面的示例中,循环将遍历字符串列表中的每个项目,使用变量 element 代表当前项目。

for element in Hydrogen Helium Lithium Berylliumdo echo "Element: $element"done

循环将产生以下输出:

Element: HydrogenElement: HeliumElement: LithiumElement: Beryllium

循环遍历数字范围

您可以使用序列表达式通过定义范围的起点和终点来指定数字或字符的范围。序列表达式采用以下形式:

{START..END}

在下面的示例中,循环将遍历从 0 到 3 的所有数字。

for i in {0..3}do echo "Number: $i"doneNumber: 0Number: 1Number: 2Number: 3

从 Bash 4 开始,还可以在使用范围时指定增量。表达式采用以下形式:

{START..END..INCREMENT}for i in {0..20..5}do echo "Number: $i"doneNumber: 0Number: 5Number: 10Number: 15Number: 20

循环数组元素

您还可以使用 for 循环迭代元素数组:

在下面的示例中,我们定义一个数组 BOOKS 并迭代数组的每个元素。

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')for book in "${BOOKS[@]}"; do echo "Book: $book"doneBook: In Search of Lost TimeBook: Don QuixoteBook: UlyssesBook: The Great Gatsby

C 风格的 Bash for 循环

C-style for 循环的语法采用以下形式:

for ((INITIALIZATION; TEST; STEP))do [COMMANDS]done

INITIALIZATION 部分仅在循环开始时执行一次。然后,评估 TEST 部分。如果为假,则 for 循环终止。如果 TEST 为真,则执行 for 循环体内的命令并更新 STEP 部分。

在下面的代码中,循环通过初始化星型 i = 0 ,然后在每次迭代之前检查是否 i ≤ 10 。如果为 true ,则打印当前值 i 并将变量递增 i 1 (i++) ,否则循环终止。

for ((i = 0 ; i <= 1000 ; i++)); do echo "Counter: $i"done

循环迭代 1001 次并将产生以下输出:

Counter: 0Counter: 1Counter: 2...Counter: 998Counter: 999Counter: 1000

break 和 continue

break 和 continue 语句可用于控制 for 循环执行。

break 语句

break 语句终止当前循环并将程序控制传递给终止语句后面的语句。它通常用于在满足某个条件时终止循环。

在下面的示例中,一旦当前迭代项等于 ‘Lithium’ ,循环的执行将终止。

for element in Hydrogen Helium Lithium Beryllium; do if [[ "$element" == 'Lithium' ]]; then break fi echo "Element: $element"doneecho 'All Done!'Element: HydrogenElement: HeliumAll Done!

continue 语句

continue 语句退出循环的当前迭代,并将程序控制传递给循环的下一次迭代。

在下面的示例中,我们迭代一系列数字,当当前迭代项等于 ‘2’ 时, continue 语句将导致执行返回到循环的开头并继续下一次迭代。

for i in {1..5}; do if [[ "$i" == '2' ]]; then continue fi echo "Number: $i"doneNumber: 1Number: 3Number: 4Number: 5

For 循环示例

重命名文件名中包含空格的文件

下面的示例演示如何使用 Bash for 循环通过将空格替换为下划线来重命名当前目录中的所有文件,并在其名称中包含空格。

for file in * *; do mv "$file" "${file// /_}"done

让我们逐行分解代码:

  • 第一行创建一个 for 循环,并遍历其名称中带有空格的所有文件的列表。表达式 * * 创建列表。
  • 第二行适用于列表中的每个项目,并将文件移动到新的文件,用下划线 (_) 替换空格。该部分 ${file// /_ } 使用 shell 参数扩展来用字符串替换参数中的模式。
  • done 表示循环段的结束。

更改文件扩展名

以下示例显示如何使用 Bash for 循环通过将文件扩展名从 .jpeg 替换为 .jpg 来重命名当前目录中以 .jpeg 结尾的所有文件。

for file in *.jpeg; do mv -- "$file" "${file%.jpeg}.jpg"done

让我们逐行分析代码:

  • 第一行创建一个 for 循环,并遍历一个包含 .jpeg 结尾的所有文件的列表。
  • 第二行适用于列表中的每个项目,并将文件移动到一个用 .jpg 替换 .jpeg 的新文件。该部分 ${file%.jpeg }使用 shell 参数扩展从文件名中删除 .jpeg 部分。
  • done 表示循环段的结束。

结论

到目前为止,您应该很好地理解如何使用 bash for 循环遍历列表。

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

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

相关文章

linux 信号_Linux的信号和线程

Linux的信号和线程-Tech Talk 让技术发出声音​www.ttalk.im什么是线程线程&#xff0c;有时被称为轻量级进程(Lightweight Process&#xff0c;LWP&#xff09;&#xff0c;是程序执行流的最小单元。一个标准的线程由线程ID&#xff0c;当前指令指针(PC&#xff09;&#xff0…

python 数据结构

一. 深入链表 先来介绍一些链表具备的一些常用方法&#xff1a; append(x) : 把一个元素添加到链表的结尾 extend(L) : 将另外一个链表合并到该链表中 insert(i,x) : 插入一个元素到指定位置的前面 remove(x) : 删除链表中第一个值为x的元素 如果没有这样的元素 则返回错误 pop…

go语言项目优化(经验之谈)

1 Go的应用场景 在斗鱼我们将GO的应用场景分为以下三类&#xff0c;缓存类型数据&#xff0c;实时类型数据&#xff0c;CPU密集型任务。这三类应用场景都有着各自的特点。 ● 缓存类型数据在斗鱼的案例就是我们的首页&#xff0c;列表页&#xff0c;这些页面和接口的特点是不同…

python交互界面用图片当背景_wxPython实现窗口用图片做背景

本文实例为大家分享了wxPython实现窗口用图片做背景的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 效果图&#xff1a;实现代码&#xff1a; #!/usr/bin/env python # -*- encoding:utf-8 -*- import wx class MyPanel(wx.Panel): def __init__(self,parent,id): …

c 字符串转数字_C语言实现十进制转216进制、十六进制转十进制

1、十进制转2&#xff5e;16进制【问题描述】从键盘输入十进制整数num及转换的进制数base&#xff0c;将整数num转换为base进制(base取值范围为 2&#xff5e;16)。方法为&#xff1a;十进制数除base取余法&#xff0c;即十进制数除以base&#xff0c;余数为权位上的数&#xf…

一个简单的LINQ TO XML, AJAX 例子[译]

这个教程是用Visual Studio.net 2008建立&#xff0c;也可以使用VS2005&#xff0c;但你需要从这里下载安装Microsofts ASP.NET AJAX Extensions&#xff0c;AJAX和LINQ是微软目前主要焦点&#xff0c;两个看上去不足为奇&#xff0c;但背后都隐藏着巨大的潜力和力量。在这个示…

python3性能还低吗_Python3 vs. Python2 大作战,谁将是性能之王?

渲染 HTML 模板 django_html 测试将使用 Django 模板渲染引擎来构建一个 150x150 的 HTML 表格。 它利用了 Django 引擎的 Content 和 Template 类。如图所示&#xff0c;Python 3.7 比 Python 2.7 快 1.19 倍&#xff0c;但除此之外&#xff0c;其他 Python 3 版本都没有 Pyth…

python day08

一 文件处理补充 控制文件中光标移动 1 f.read(n): l.文件打开方式为文本模式的时,代表读取N个字符 ll.文件打开方式为b模式时,读取N个字节 强调:只有在read(n)模式下 N代表字符个数,除此之外的是以字节为单位 2 f.seek(): 光标移动是以字节为单位的整数移动. 三种模式:(分别为…

VSCode 小鸡汤 第00期 —— 安装和入门

简介 这将是一个新的系列&#xff0c;将会以 Visual Studio Code&#xff08;后文都简称为 VSCode 啦&#xff09;的操作&#xff0c;环境配置&#xff0c;插件介绍为主&#xff0c;为大家不定期的介绍 VSCode 的一些操作技巧&#xff0c;所以取名 VSCode 小鸡汤&#xff0c;本…

一次缓存性能问题排查

概述以下分享的都跳过了很多坑&#xff0c;包括redis、tomcat环境配置、机器硬件配置等等问题&#xff08;与线上保持一致&#xff0c;或者硬件性能减配系数&#xff0c;例如线上&#xff1a;8C16G&#xff0c;压测&#xff1a;4C8G&#xff0c;系数简单相差2倍&#xff09;&am…

再读新疆系列(六)——吹拂“卡拉库里湖”的风

一下飞机&#xff0c;导游王雪作了简短的自我介绍&#xff0c;马不停蹄地带着我们经喀什市区直接向帕米尔高原的“卡拉库里”湖走。 问午饭在哪吃&#xff1f; 答&#xff1a;“湖边”。 “几点能到&#xff1f;” “大约下午二点多。”妈呀&#xff0c;又经历一次残酷的饥饿历…

记录一次webpack3升级到webpack4过程

升级之前也参考了一些网上的教程。借鉴之&#xff0c;进行的自己的升级。一些版本为什么设为那个版本号也是参考别人的结果。 整体是按照先升级npm run dev&#xff1b;在升级npm run build的顺序。 首先升级webpack&#xff0c;在package.json文件中将webpack版本号修改为4.8.…

plsql如何执行存储过程_如何理解Spark应用的执行过程

从Spark应用的提交到执行完成有很多步骤&#xff0c;为了便于理解&#xff0c;我们把应用执行的整个过程划分为三个阶段。而我们知道Spark有多种运行模式&#xff0c;不同模式下这三个阶段的执行流程也不相同。本文介绍这三个阶段的划分&#xff0c;并概要介绍不同模式下各个阶…

vc如何打开plt图像_图像基本操作-open cv

import cv2 import matplotlib.pyplot as plt import numpy as np %matplotlib inline img cv2.imread(revolte.jpg) img # 读取的是array 格式 array([[[240, 243, 255],[239, 242, 255],[238, 241, 255],...,def cv_show(name,image):cv2.imshow(name,image)cv2.waitKey(0)c…

python调用api应用接口_Python接口测试之urllib2库应用

在接口测试中或者说在网络爬虫中&#xff0c;urllib2库是必须要掌握的一个库&#xff0c;当然还有优秀的requests库&#xff0c;今天重点来说urllib2库在接口测试中的应用。urllib2定义了很多的函数和类&#xff0c;这些函数和类能够帮助我们在复杂情况下获取URLS的内容。这些情…

CSS3透明背景表单

在线演示 本地下载

r-studio扫描后各种颜色_iPhone手机备忘录,原来还隐藏着扫描仪,你不会还不知道吧?...

大家好&#xff0c;今天就来给大家讲一讲&#xff0c;iPhone手机备忘录里面的一个隐藏功能&#xff0c;大家对手机备忘录应该都不陌生吧&#xff0c;iPhone手机的备忘录里有一个扫描仪的功能&#xff0c;可以将纸质文档变成电子档&#xff0c;不知道的小伙伴就和我一起来看看吧…

今早新闻的翻译

踏切で人身事故 東上線乱れ&#xff14;万人に影響  &#xff11;&#xff15;日午前&#xff17;時&#xff12;&#xff10;分ごろ、東京都板橋区常盤台&#xff13;丁目の東武東上線ときわ台―上板橋間の踏切で遮断機の下をくぐった女性が成増発池袋行き普通電車にはねられ…

TiDB 在小米的应用实践

作者&#xff1a;张良&#xff0c;小米 DBA 负责人&#xff1b;潘友飞&#xff0c;小米 DBA&#xff1b;王必文&#xff0c;小米开发工程师。一、应用场景介绍 MIUI 是小米公司旗下基于 Android 系统深度优化、定制、开发的第三方手机操作系统&#xff0c;也是小米的第一个产品…

java图片识别查看器模拟_[转载]windows照片查看器无法显示图片内存不足

问题描述最近在使用Windows照片查看器打开一个jpg文件的时候异常Windows照片查看器无法显示此图片&#xff0c;因为计算机上的可用内存可能不足。请关闭一些目前没有使用的程序或者释放部分硬盘空间(如果硬盘几乎已满)&#xff0c;然后重试问题分析这时我们按F11或者图片下方中…