Appearance
循环
for 循环
基本语法
bash
for variable in list; do
commands
done遍历列表
bash
#!/bin/bash
for fruit in apple banana orange; do
echo "水果: $fruit"
done遍历数字范围
bash
#!/bin/bash
# 方式一:使用 {start..end}
for i in {1..5}; do
echo "数字: $i"
done
# 方式二:使用 seq
for i in $(seq 1 5); do
echo "数字: $i"
done
# 方式三:使用 C 风格
for ((i=1; i<=5; i++)); do
echo "数字: $i"
done遍历数组
bash
#!/bin/bash
arr=("apple" "banana" "orange")
for fruit in "${arr[@]}"; do
echo "水果: $fruit"
done遍历文件
bash
#!/bin/bash
# 遍历当前目录的文件
for file in *.txt; do
echo "文件: $file"
done
# 遍历指定目录的文件
for file in /path/to/directory/*; do
echo "文件: $file"
donewhile 循环
基本语法
bash
while condition; do
commands
done基本示例
bash
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
count=$((count + 1))
done读取文件
bash
#!/bin/bash
# 逐行读取文件
while IFS= read -r line; do
echo "行: $line"
done < file.txt无限循环
bash
#!/bin/bash
# 方式一
while true; do
echo "无限循环"
sleep 1
done
# 方式二
while :; do
echo "无限循环"
sleep 1
doneuntil 循环
基本语法
bash
until condition; do
commands
done基本示例
bash
#!/bin/bash
count=1
until [ $count -gt 5 ]; do
echo "计数: $count"
count=$((count + 1))
done循环控制
break
bash
#!/bin/bash
for i in {1..10}; do
if [ $i -eq 5 ]; then
break
fi
echo "数字: $i"
donecontinue
bash
#!/bin/bash
for i in {1..10}; do
if [ $((i % 2)) -eq 0 ]; then
continue
fi
echo "奇数: $i"
donebreak 和 continue 结合
bash
#!/bin/bash
for i in {1..10}; do
if [ $i -eq 5 ]; then
continue
fi
if [ $i -eq 8 ]; then
break
fi
echo "数字: $i"
done嵌套循环
基本示例
bash
#!/bin/bash
for i in {1..3}; do
for j in {1..3}; do
echo "i=$i, j=$j"
done
done打印乘法表
bash
#!/bin/bash
for i in {1..9}; do
for j in {1..9}; do
printf "%d*%d=%-2d " $i $j $((i*j))
done
echo
done实用示例
示例1:批量重命名文件
bash
#!/bin/bash
# 批量重命名文件
count=1
for file in *.txt; do
new_name="file_$count.txt"
mv "$file" "$new_name"
echo "重命名: $file -> $new_name"
count=$((count + 1))
done示例2:查找大文件
bash
#!/bin/bash
# 查找大于 100MB 的文件
find /path/to/directory -type f -size +100M | while read file; do
size=$(du -h "$file" | cut -f1)
echo "大文件: $file ($size)"
done示例3:监控进程
bash
#!/bin/bash
# 监控进程
while true; do
if pgrep -x "nginx" > /dev/null; then
echo "nginx 正在运行"
else
echo "nginx 未运行"
fi
sleep 5
done示例4:倒计时
bash
#!/bin/bash
# 倒计时
for i in {10..1}; do
echo -ne "倒计时: $i 秒\r"
sleep 1
done
echo "倒计时结束!"最佳实践
1. 使用双括号进行算术比较
bash
# 好的做法
for ((i=0; i<10; i++)); do
echo $i
done
# 不好的做法
for i in $(seq 0 9); do
echo $i
done2. 使用引号
bash
# 好的做法
for file in *.txt; do
echo "$file"
done
# 不好的做法
for file in *.txt; do
echo $file
done3. 避免无限循环
bash
# 好的做法
count=0
while [ $count -lt 10 ]; do
echo $count
count=$((count + 1))
done
# 不好的做法
while true; do
echo "无限循环"
done总结
循环的关键点:
- for 循环:
for variable in list; do ... done - while 循环:
while condition; do ... done - until 循环:
until condition; do ... done - break:跳出循环
- continue:跳过本次循环
- 嵌套循环:在一个循环中嵌套另一个循环
下一节我们将学习 case 语句的使用。