迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Bash 中的嵌套 for 循环

作者:迹忆客 最近更新:2023/05/19 浏览次数:

在本篇文章中,我们将讨论 bash 中的嵌套循环。 首先,我们将快速讨论 bash 中可用的不同 for 循环公式。 接下来,我们将举例讨论嵌套for循环。


Bash 中 for 循环的变体

首先,让我们看一下 bash 中 for 循环的语法:

for var in something
do
    command
done

在此语法中,变量名是用户的选择。 某事有多种选择,我们将在稍后讨论。

我们可以在 for 主体中编写任意数量的命令。 bash 中有多种 for 循环变体; 我们很快就会在下面看到一些。

for in the Range of Numbers

我们可以使用 for 循环指定一个数字列表,并可以一个接一个地迭代这些数字,如下例所示:

for i in 1 3 8
do
    echo $i
done

循环将迭代给定的值列表(即 1 3 8)。 在此特定示例中,输出将是:

1
3
8

for 迭代值列表

我们可以定义一个值列表并迭代该列表,如下所示:

x=(1 3 8)
for i in ${x[@]}
do
    echo $i
done

此代码的结果将与上一个示例的输出相同。 在 for 循环语句中,{x[@]} 表示:对于列表 x` 的每个元素。

for 序列的范围

我们可以给出一系列值,起始编号后跟双点 ..,然后是结束编号。 类似地,我们可以将另一对点放在一个步骤之后。

例如,让我们看一下以下两个示例循环公式:

for i in {1..3}
do
    echo $i
done
echo "----------------------"
for i in {1..3..2}
do
    echo $i
done

此代码的输出将是:

1
2
3
----------------------
1
3

for 字符串中单词

我们可以定义一个由空格分隔的字符串中的单词列表,并迭代字符串中的单词,如下所示:

names="Asim Babar Munir Ali"
for name in $names
do
    echo $name
done

此代码的输出将在单独的行中给出名称,如下所示。

Asim
Babar
Munir
Ali

C-Style for 表达式

我们可以在 for 循环中给出类似于C语言中for的表达式。 看例子:

for ((i=1;i<=5;i++))
do
    echo $i
done

它将产生以下输出:

1
2
3
4
5

for 循环中 continue 语句的使用

我们可以在 for 循环的主体中放置一些条件,然后是一个 continue 语句以跳过循环的下一个主体。 看例子:

for ((i=1;i<=5;i++))
do
    if [ $i == 3 ]
    then
        continue
    fi
    echo $i
done

由于 if 条件,循环将跳过值 3 的 echo 命令; 因此,输出将是:1 2 4 5。

循环命令行参数

我们可以为我们的 bash 脚本提供命令行参数,并在由空格分隔的参数上运行 for 循环。 看例子:

for i in $@
do
    echo "Script arg is $i"
done

在第一行中,$@ 符号表示由空格分隔的参数列表。 请参阅此示例的输出:

bash myscript.sh 13 28
Script arg is 13
Script arg is 28

循环命令输出

我们可以在某些命令的输出上运行 for 循环。 看例子:

for f in $(ls)
do
  echo "**** $f *****"
done

该脚本将获取 ls 命令的输出并迭代这些值。 请参阅示例输出:

**** first.c *****
**** second.c *****
**** third.c *****

循环变量序列

我们还可以在运行时根据一些变量运行一些输入。 为此,我们可以使用 seq 1 1 $n,其中 n 可以是一个变量。 看例子:

n=4
for i in $(seq 1 1 $n)
do
    echo -n $i
    echo " "
done

在这里,我已将值 4 分配给一个变量,而它可以是一些计数,例如字数等。请参见示例输出:

1
2
3
4

Bash 中的嵌套 for 循环

我们在 bash 中有各种嵌套的 for 循环。 根据我们的要求,我们可以创建嵌套 for 循环的多种变体(即,通过组合可用的 for 循环公式。

在这里,我们将看到带有输出的多个示例:

  • 打印前五个正整数的前十个倍数。
    for number in {1..5}
    do
      for n in {1..10}
      do
          echo -n $((number*$n))
          echo -n " "
      done
      echo ""
    done
    
    此代码的输出是:
    1 2 3 4 5 6 7 8 9 10
    2 4 6 8 10 12 14 16 18 20
    3 6 9 12 15 18 21 24 27 30
    4 8 12 16 20 24 28 32 36 40
    5 10 15 20 25 30 35 40 45 50
    
  • 打印整数列表的前 10 个倍数。
    for number in 2 5 9
    do
      for n in {1..10}
      do
          echo -n $((number*$n))
          echo -n " "
      done
      echo ""
    done
    
    此代码的输出是:
    2 4 6 8 10 12 14 16 18 20
    5 10 15 20 25 30 35 40 45 50
    9 18 27 36 45 54 63 72 81 90
    
  • 以三角形图案打印数字。
    for number in {1..5}
    do
      for n in $(seq 1 1 $number)
      do
          echo -n $n
      done
      echo ""
    done
    
    此代码的输出是:
    1
    12
    123
    1234
    12345
    
    我们可能会从命令行参数中得到几行来打印可变大小的模式。 见代码:
    for number in $(seq 1 1 $@)
    do
      for n in $(seq 1 1 $number)
      do
          echo -n $n
      done
      echo ""
    done
    
    命令 bash pattern2.sh 6 的输出是:
    1
    12
    123
    1234
    12345
    123456
    
    其中 patter2.sh 是此脚本的名称,6 是命令行参数。
  • 打印带有星号 (*) 或任何其他字符的三角形图案。
    for number in $(seq 1 1 $@)
    do
      for n in $(seq 1 1 $number)
      do
          echo -n "*"
      done
      echo ""
    done
    
    带有参数 4 的代码的输出是:
    *
    **
    ***
    ****
    
  • 多次打印消息(for 代码段)。
    messages="Sea_is_rough Don't_go_too_far_in_the_sea Remain_in_the_group Don't_take_kids_inside"
    for i in 1 2 3 4 5
    do
      for message in $messages
      do
          echo $message
      done
      echo "----------------------------------"
    done
    
    其输出是:
    Sea_is_rough
    Don't_go_too_far_in_the_sea
    Remain_in_the_group
    Don't_take_kids_inside
    ----------------------------------
    Sea_is_rough
    Don't_go_too_far_in_the_sea
    Remain_in_the_group
    Don't_take_kids_inside
    ----------------------------------
    Sea_is_rough
    Don't_go_too_far_in_the_sea
    Remain_in_the_group
    Don't_take_kids_inside
    ----------------------------------
    Sea_is_rough
    Don't_go_too_far_in_the_sea
    Remain_in_the_group
    Don't_take_kids_inside
    ----------------------------------
    Sea_is_rough
    Don't_go_too_far_in_the_sea
    Remain_in_the_group
    Don't_take_kids_inside
    ----------------------------------
    
  • 在一行中打印从 1 开始计数。 您必须打印计数直到命令行参数列表。
    for number in $@
    do
      for i in $(seq 1 1 $number)
      do
          echo -n "$i "
      done
      echo ""
    done
    
    Bash counting.sh 4 5 8 此代码的输出是:
    1 2 3 4
    1 2 3 4 5
    1 2 3 4 5 6 7 8
    
  • 打印 10 到 20 的倍数,但不要打印此序列中质数的倍数。
    for number in $(seq 10 1 20)
    do
      if [[ $number == 11 || $number == 13 || $number == 17 || $number == 19 ]]
      then
          continue
      fi
      for n in {1..10}
      do
          echo -n $((number*$n))
          echo -n " "
      done
      echo ""
    done
    
    此代码的输出是:
    10 20 30 40 50 60 70 80 90 100
    12 24 36 48 60 72 84 96 108 120
    14 28 42 56 70 84 98 112 126 140
    15 30 45 60 75 90 105 120 135 150
    16 32 48 64 80 96 112 128 144 160
    18 36 54 72 90 108 126 144 162 180
    20 40 60 80 100 120 140 160 180 200
    
    最后,我们在 bash 中有多种嵌套的 for 循环。 因此,我们可以根据需要组合使用可用的 for 循环变体来完成任务。

上一篇:Bash 双管道

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Bash 双管道

发布时间:2023/05/20 浏览次数:119 分类:操作系统

本文对管道和双管道进行了充分的探讨。 它将讨论管道在 Bash 命令脚本中的用法、符号和影响。

检查 Bash 中是否存在命令

发布时间:2023/05/20 浏览次数:77 分类:操作系统

我们可以在 Bash 中使用不同的内置命令来检查命令是否存在。 下面演示了这些命令的使用。使用命令 -v 命令检查 Bash 中是否存在命令 命令 -v 是所有 POSIX 系统和 Bash 中的内置函数。

在 Linux 中添加新用户的 Bash 脚本

发布时间:2023/05/20 浏览次数:54 分类:操作系统

这篇简短的文章是关于创建一个 Bash 脚本,该脚本可以自动为 Linux 操作系统添加用户和分配密码。 在 Linux 操作系统中,useradd 命令用于添加新用户并为他们提供密码。Bash 脚本 useradd 命令

在 Bash 中获取当前日期和时间

发布时间:2023/05/20 浏览次数:197 分类:操作系统

本文讨论在 Bash Scripting 中以某种指定格式显示当前日期和时间的方法。 为此,date 命令与多个选项一起使用。在 Bash 中使用日期命令

批处理脚本中的 For 循环

发布时间:2023/05/19 浏览次数:103 分类:操作系统

本篇文章将介绍如何在批处理脚本中使用 FOR 循环。循环用于连续执行特定任务,直到达到程序员指定的次数。 这个 FOR 循环有不同的版本。

批处理脚本中的 For \F

发布时间:2023/05/19 浏览次数:151 分类:操作系统

本文将讨论在批处理脚本中使用 FOR /F 循环。在批处理脚本中使用 FOR /F 循环 此类 FOR 循环的一般格式如下所示:

批处理文件循环遍历子目录中的文件

发布时间:2023/05/19 浏览次数:163 分类:操作系统

本文说明了我们如何编写一个批处理脚本来循环遍历子目录中的文件。 我们将举一个例子来解释这个概念。批处理文件循环遍历子目录中的文件

批处理文件删除文件名的 X 个字符

发布时间:2023/05/19 浏览次数:136 分类:操作系统

本文说明了我们如何使用批处理脚本从文件的文件名中删除特定字符。 我们将在下面介绍在 Windows 上重命名文件的几种方法。Windows 上的文件资源管理器重命名

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便