Shell脚本7 -- for循环

声明:
本文的学习内容来源于B站up主“泷羽sec”视频【shell(6)if条件判断与for循环结构】的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。
本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和“泷羽sec”无关。请读者自觉遵纪守法,合理合法使用相关知识。


Shell 脚本中的 for 循环是一种强大的工具,用于遍历列表或执行一系列重复任务。本文将通过几个实际示例,带你轻松掌握 for 循环的基本用法和进阶技巧。

1 基本语法

for 循环的基本语法如下:

for variable in list
do
    commands
done
  • for:用于声明循环的开始,并定义一个变量 variable,用来依次取出 list 中的元素。
  • variable:循环中用于存储列表中每一项的变量。
  • list:需要遍历的列表,元素之间用空格分隔。
  • do:标志循环体的开始,接下来的一组命令会在每次迭代中执行。
  • commands:每次循环执行的命令块。
  • done:标志循环体的结束,告诉脚本循环已经完成。

2 遍历列表

下面是一个简单示例,打印一个列表中的每个元素:

#!/bin/bash

for i in 1 2 3 4 5 6 7 8 9 10
do
    echo "Num: $i"
done

运行结果:

Num: 1
Num: 2
...
Num: 9
Num: 10

3 遍历文件

先用for生成1.txt10.txt 的 Shell 脚本:

#!/bin/bash

# 创建 1.txt 到 10.txt
for i in {1..10}
do
    touch "$i.txt"
    echo "File $i.txt created."
done

echo "All files generated successfully."

for 循环也可以用来遍历文件列表:

#!/bin/bash

for file in *.txt
do
    echo "Processing file: $file"
done

运行时会处理当前目录下的所有 .txt 文件,并输出每个文件名。
运行结果:

Processing file: 10.txt
Processing file: 1.txt
Processing file: 2.txt
Processing file: 3.txt
Processing file: 4.txt
Processing file: 5.txt
Processing file: 6.txt
Processing file: 7.txt
Processing file: 8.txt
Processing file: 9.txt

4 使用范围遍历

for 循环支持使用大括号指定范围:

#!/bin/bash

for i in {1..5}
do
    echo "Number: $i"
done

运行结果:

Number: 1
Number: 2
Number: 3
Number: 4
Number: 5

你还可以指定步长:

for i in {1..10..2}
do
    echo "Even Number: $i"
done

结果:

Even Number: 1
Even Number: 3
Even Number: 5
Even Number: 7
Even Number: 9

5 从命令输出生成列表

5.1 $()

利用命令输出动态生成循环列表是 for 的一个重要功能:

#!/bin/bash

for user in $(cat /etc/passwd | cut -d: -f1)
do
    echo "User: $user"
done

这个脚本会列出系统中所有用户。

  • $()命令替换 的语法,用于将括号中命令的输出结果作为字符串返回并替代这段代码。在脚本中,$() 会先执行括号内的命令,并将其输出传递给外部的变量或命令。
  • cut 用于从文本中提取指定的字段或字符,-d:指定分隔符为冒号 (:),-f1:提取第一个字段,每行分割后的第一个字段正好是用户名。

5.2 反引号

#!/bin/bash

for i in `seq 1 100`
do
	echo $1
done

这个脚本会输出1-100的值。

  • seq 是一个用于生成数字序列的命令,运行 seq 1 100 会生成一个从 1 到 100 的数字序列,每个数字占一行。

5.3 反引号和$()的区别

  • 功能:两者作用相同,都是用于命令替换。
  • 优劣$() 更清晰、强大,推荐用于大多数场景;反引号适合简单命令且需兼容旧系统时使用。

6 嵌套循环

你可以在 for 循环中嵌套另一个 for 循环,来实现更复杂的任务:

#!/bin/bash

for i in {1..3}
do
    for j in {a..c}
    do
        echo "Combination: $i$j"
    done
done

结果:

Combination: 1a
Combination: 1b
Combination: 1c
Combination: 2a
Combination: 2b
Combination: 2c
Combination: 3a
Combination: 3b
Combination: 3c

7 双括号语法

在 Shell 脚本中,除了常见的 for...in 语法外,还可以使用双括号语法进行 for 循环。这种语法更接近 C 语言的循环风格,通常用于数字范围的循环。

7.1 基本语法

双括号语法的基本形式如下:

for ((initialization; condition; increment))
do
    commands
done
  • initialization:循环变量的初始值。
  • condition:循环的终止条件,当条件为假 (false) 时,循环终止。
  • increment:每次迭代后执行的操作,通常是变量的自增或自减。

7.2 示例

示例 1:打印数字

以下脚本使用双括号语法打印从 1 到 10 的数字:

#!/bin/bash

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

运行结果:

1
2
3
...
98
99

示例 2:控制步长

双括号语法支持灵活的步长设置,例如打印偶数:

#!/bin/bash

for ((i=2; i<=20; i+=2))
do
    echo "Even Number: $i"
done

运行结果:

Even Number: 2
Even Number: 4
...
Even Number: 20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值