Shell编程 - 循环篇
1. for 循环
for 循环是用于遍历一个序列(如列表、字符串、元组等)的循环结构。它会依次取出序列中的每个元素,执行循环体中的代码。
格式
for 变量名 in 序列; do
命令
done
示例
示例 1:遍历数字序列
#!/bin/bash
for i in {1..3}; do
echo $i
done
# 输出:
# 1
# 2
# 3
示例 2:遍历位置参数
#!/bin/bash
for i in "$@"; do # $@ 是将位置参数作为单个来处理
echo $i
done
# 调用方式:bash test.sh 1 2 3
# 输出:
# 1
# 2
# 3
示例 3:遍历文件内容
#!/bin/bash
for line in $(cat a.txt); do
echo $line
done
# 假设 a.txt 内容为:
# a b c
# 1 2 3
# x y z
# 输出:
# a
# b
# c
# 1
# 2
# 3
# x
# y
# z
C语言风格
for (( 初始化; 条件; 更新 ))
do
命令1
命令2
...
done
这种形式类似于 C 语言中的 for 循环,适合用于数值范围的迭代。
示例:
for ((i=1; i<=5; i++))
do
echo "Number: $i"
done
输出:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
2. while 循环
while 循环是基于条件判断的循环结构。只要条件为真,循环体就会一直执行。
格式
while 条件表达式; do
命令
done
示例
示例 1:基于计数的 while 循环
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
let N++
echo $N
done
# 输出:
# 1
# 2
# 3
# 4
# 5
示例 2:死循环
#!/bin/bash
while true; do
echo "yes"
done
# 此循环会一直输出 "yes",直到手动终止
示例 3:逐行读取文件
假设文件 a.txt 内容如下:
a b c
1 2 3
x y z
方式 1:通过管道读取
#!/bin/bash
cat ./a.txt | while read LINE; do
echo $LINE
done
# 输出:
# a b c
# 1 2 3
# x y z
方式 2:通过重定向读取
#!/bin/bash
while read LINE; do
echo $LINE
done < ./a.txt
# 输出:
# a b c
# 1 2 3
# x y z
方式 3:通过 exec 读取
#!/bin/bash
exec < ./a.txt # 读取文件作为标准输入
while read LINE; do
echo $LINE
done
# 输出:
# a b c
# 1 2 3
# x y z
示例 4:统计 IP 出现次数并进行网络测试
假设文件 ip.txt 内容如下:
10.0.0.61 5
10.0.0.7 6
10.0.0.8 8
baidu.com 10
jd.com 5
#!/bin/bash
# 1. 定义文件路径
src_file=./ip.txt
# 2. 使用 while 读取文件并进行判断
while read ip count; do
if [ $count -ge 5 ]; then
ping -c 1 $ip &>/dev/null # 发送一个 ICMP 请求,将输出重定向到 /dev/null
if [ $? -eq 0 ]; then
echo -e "\033[32m$ip 可以访问\033[0m" # 绿色输出
else
echo -e "\033[31m$ip 不可以访问\033[0m" # 红色输出
fi
fi
done < $src_file
3. break 和 continue 语句
break 和 continue 是用于控制循环流程的语句。
break:终止循环
break 语句用于完全终止循环,跳出循环体。
示例 1:在死循环中,满足条件终止循环
#!/bin/bash
N=0
while true; do
let N++
if [ $N -eq 5 ]; then
break # 当 N 等于 5 时,终止循环
fi
echo $N
done
# 输出:
# 1
# 2
# 3
# 4
continue:跳过当前循环
continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。
示例 2:跳过特定条件的循环
#!/bin/bash
N=0
while [ $N -lt 5 ]; do
let N++
if [ $N -eq 3 ]; then
continue # 当 N 等于 3 时,跳过当前循环
fi
echo $N
done
# 输出:
# 1
# 2
# 4
# 5
总结
for循环:适用于遍历序列(如数字、文件内容等)。while循环:适用于基于条件判断的循环。break和continue:用于控制循环流程,break终止循环,continue跳过当前循环。

浙公网安备 33010602011771号