声明:
本文的学习内容来源于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.txt
到 10.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