Bash 中的嵌套 for 循环
在本篇文章中,我们将讨论 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
-
打印带有星号 (
*
) 或任何其他字符的三角形图案。for number in $(seq 1 1 $@) do for n in $(seq 1 1 $number) do echo -n "*" done echo "" done
* ** *** ****
-
多次打印消息(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
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 中是否存在命令
发布时间: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 上的文件资源管理器重命名