1 分钟阅读 次阅读

基本语法

while [条件测试]
do
    # 执行的命令
done

或者写在一行:

while [条件测试]; do 命令; done

详细解析

1. 语法结构

while condition
do
    commands
done
  • condition: 循环条件,可以是命令、测试表达式等
  • commands: 循环体中的命令
  • 当条件为真(退出状态为 0)时执行循环体

2. 条件测试的常见形式

数值比较:

while [ $counter -lt 10 ]
do
    echo $counter
    ((counter++))
done

字符串比较:

while [ "$input" != "quit" ]
do
    read -p "输入内容: " input
    echo "你输入了: $input"
done

命令返回值:

while ping -c1 example.com &> /dev/null
do
    echo "主机可达"
    sleep 5
done
echo "主机不可达"

常用示例

示例 1:基本计数器

#!/bin/bash
count=1
while [ $count -le 5 ]
do
    echo "循环次数: $count"
    count=$((count+1))
done

示例 2:读取文件内容

#!/bin/bash
while read line
do
    echo "行内容: $line"
done < filename.txt

示例 3:无限循环

#!/bin/bash
while true
do
    echo "按Ctrl+C退出"
    sleep 1
done

或者使用 : 命令(总是返回 0):

while :
do
    echo "按Ctrl+C退出"
    sleep 1
done

示例 4:算术条件

#!/bin/bash
i=0
while (( i < 5 ))
do
    echo "i = $i"
    ((i++))
done

示例 5:使用 C 语言风格

#!/bin/bash
((count=1))
while ((count <= 5))
do
    echo "计数: $count"
    ((count++))
done

循环控制

break - 跳出循环

while true
do
    read -p "输入quit退出: " input
    if [ "$input" = "quit" ]; then
        break
    fi
    echo "你输入了: $input"
done

continue - 跳过本次循环

count=0
while [ $count -lt 10 ]
do
    ((count++))
    if [ $((count % 2)) -eq 0 ]; then
        continue
    fi
    echo "奇数: $count"
done

实用技巧

1. 结合 read 读取用户输入

while read -p "请输入命令: " cmd && [ "$cmd" != "quit" ]
do
    case $cmd in
        help) echo "帮助信息..." ;;
        list) echo "列出文件..." ;;
        *) echo "未知命令" ;;
    esac
done

2. 处理命令输出

while IFS= read -r line
do
    echo "处理: $line"
done < <(find . -name "*.txt")

3. 嵌套循环

i=1
while [ $i -le 3 ]
do
    j=1
    while [ $j -le 3 ]
    do
        echo "i=$i, j=$j"
        ((j++))
    done
    ((i++))
done

留下评论