百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

如何在 Linux 中使用 Bash For 循环

wptr33 2025-09-04 19:53 11 浏览

动动发财的小手,点个赞吧!

在编程语言中,循环是必不可少的组件,当您想要一遍又一遍地重复代码直到满足指定条件时使用。

在 Bash 脚本中,循环扮演着几乎相同的角色,并用于自动执行重复性任务,就像在编程语言中一样。

在 Bash 脚本中,有 3 种类型的循环:for 循环、while 循环和 until 循环。这三个用于迭代值列表并执行一组给定的命令。

本指南[1]中,我们将重点介绍 Linux 中的 Bash For 循环。

循环语法

如前所述,for 循环遍历一系列值并执行一组 Linux 命令。

For 循环采用以下语法:

for variable_name in value1 value2 value3  .. n
do
    command1
    command2
    commandn
done

现在让我们检查 bash for 循环的几个示例用法。

循环示例

在最简单的形式中,for 循环采用以下基本格式。在此示例中,变量 n 遍历一组用花括号括起来的数值,并将它们的值打印到标准输出。

for n in {1 2 3 4 5 6 7};
do
   echo $n
done

带有范围的循环

在前面的示例中,我们明确列出了要由 for 循环迭代的值,效果很好。但是,您只能想象如果您要迭代(例如,一百个值),那将是一项多么繁琐和耗时的任务。这将迫使您键入从 1 到 100 的所有值。

要解决此问题,请指定一个范围。为此,请指定以两个句点分隔的开始和停止编号。

在此示例中,1 是第一个值,而 7 是范围中的最后一个值。

#!/bin/bash

for n in {1..7};
do
   echo $n
done

执行 shell 脚本后,将列出范围内的所有值,类似于我们在简单循环中的情况。

此外,我们可以在范围的末尾包含一个值,该值将导致 for 循环以增量步骤迭代这些值。

以下 bash 脚本打印 1 到 7 之间的值,从第一个值开始在这些值之间增加 2 个步长。

#!/bin/bash

for n in {1..7..2};
do
   echo $n
done

从上面的示例中,您可以看到循环将花括号内的值递增了 2 个值。

数组循环

您还可以使用 for 循环轻松地遍历数组中定义的值。在以下示例中,for 循环遍历 fruits 数组中的所有值并将它们打印到标准输出。

#!/bin/bash

fruits=("blueberry" "peach" "mango" "pineapple" "papaya") 

for n in ${fruits[@]}; 
do
    echo $n
done

@ 运算符访问或定位所有元素。这使得一个一个地遍历所有元素成为可能。

此外,您可以通过指定其在数组中的位置来访问单个元素。

例如,要访问“mango”元素,请将 @ 运算符替换为元素在数组中的位置(第一个元素从 0 开始,因此在这种情况下,“mango”将用 2 表示)。

这就是 for 循环的样子。

#!/bin/bash

fruits=("blueberry" "peach" "mango" "pineapple" "papaya") 

for n in ${fruits[2]}; 
do
    echo $n
done

C 风格的循环

您可以在循环内使用变量来迭代一系列元素。这就是 C 风格的 for 循环的用武之地。以下示例说明了 C 风格的 for 循环,它打印出从 1 到 7 的数值列表。

#!/bin/bash

n=7
for (( n=1 ; n<=$n ; n++ )); 
do
    echo $n
done

C 风格的带有条件语句的循环

您可以在 C 风格的 for 循环中包含条件语句。在下面的示例中,我们包含了一个 if-else 语句,用于检查并打印出 1 到 7 之间的偶数和奇数。

#!/bin/bash

for (( n=1; n<=7; n++ ))
do  
    # Check if the number is even or not
    if (( $n%2==0 ))
    then
        echo "$n is even"
    else
        echo "$n is odd"
    fi  
done

使用“Continue”语句

“continue”语句是控制脚本运行方式的内置命令。除了 bash 脚本之外,它还用于 Python 和 Java 等编程语言。

continue 语句在满足特定条件时停止循环内的当前迭代,然后恢复迭代。

考虑如下所示的 for 循环。

#!/bin/bash
for n in {1..10}
do
       if [[ $n -eq '6' ]]
       then
             echo "Target $n has been reached"
             continue
       fi
       echo $n
done

这是代码的作用:

  • 第 2 行:标记 for 循环的开始,并将变量 n 从 1 迭代到 10。
  • 第 4 行:检查 n 的值,如果变量等于 6,则脚本向标准输出回显一条消息并在第 2 行的下一次迭代中重新启动循环。
  • 第 9 行:仅当第 4 行的条件为假时才将值打印到屏幕。

以下是运行脚本后的预期输出。

使用“break”语句

顾名思义,“break”语句会在满足条件时停止或结束迭代。

考虑下面的 For 循环。

#!/bin/bash
for n in {1..10}
do
        if [[ $n -eq '6' ]]
        then
                echo "Target $n has been reached"
                break
        fi
        echo $n
done
echo "All done"

这是代码的作用:

  • 第 2 行:标记 for 循环的开始,并将变量 n 从 1 迭代到 10。
  • 第 4 行:检查 n 的值,如果变量等于 6,则脚本向标准输出回显一条消息并停止迭代。
  • 第 9 行:仅当第 4 行的条件为假时才将数字打印到屏幕上。

从输出中可以看出,一旦变量满足循环条件,循环就会停止。

Reference

[1]Source: https://www.tecmint.com/bash-for-loop-linux/

相关推荐

MySQL进阶五之自动读写分离mysql-proxy

自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...

Postgres vs MySQL_vs2022连接mysql数据库

...

3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?

引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...

一文由浅入深带你完全掌握MySQL的锁机制原理与应用

本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...

验证Mysql中联合索引的最左匹配原则

后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...

MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)

目录1.索引基础...

你会看 MySQL 的执行计划(EXPLAIN)吗?

SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...

MySQL 从入门到精通(四)之索引结构

索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...

mysql总结——面试中最常问到的知识点

mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...

mysql总结——面试中最常问到的知识点(2)

首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...

MySQL基础全知全解!超详细无废话!轻松上手~

本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...

深入剖析 MySQL 中的锁机制原理_mysql 锁详解

在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...

Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析

引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...

MySQL基础篇:DQL数据查询操作_mysql 查

一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...

MySql:索引的基本使用_mysql索引的使用和原理

一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...