Shell脚本8 -- while循环

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


在Linux中,while循环是一种常见的控制流工具,用于在满足条件时反复执行一组命令。在实际开发中,根据条件表达式的复杂程度,我们可以选择不同的条件判断方式,比如单中括号 [ ] 和双括号 (( ))


1 while循环的基本语法

while循环的基本结构如下:

while 条件
do
    命令1
    命令2
    ...
done

其中,条件可以通过单中括号 [ ] 或双括号 (( )) 来定义。二者的选择取决于条件类型,具体差异如下:

特性[ ] 单中括号(( )) 双括号
适用场景通用条件测试数值和逻辑运算
支持操作符-eq-lt-z-f+-*/&&、`
变量引用必须显式引用 $无需 $ 明确引用
性能调用外部命令,效率稍低内置于 Bash,性能更高

2 使用单中括号的while循环

单中括号 [ ] 通常用于通用条件测试,例如字符串比较、文件检查或数值比较。以下是一个使用 [ ] 的简单示例:

#!/bin/bash
i=1
while [ $i -le 10 ]
do
    echo $i
    let "i++" # Bash内置命令
done

关键点

  • [ $i -le 0 ] 判断变量 i 是否小于等于10。
  • let不返回具体运算结果,不能直接用作条件判断,支持基本运算符,不支持嵌套运算,多个表达式之间用空格隔开,可以在一条命令中完成多步计算

3 使用双括号的while循环

双括号 (( )) 是 Bash 的内置特性,主要用于处理算术运算和逻辑表达式。它比 [ ] 更简洁,尤其适用于数值计算:

#!/bin/bash
i=1
while (( i<=10 ))
do
    echo $i
    (( i++ ))  # Bash内置特征
done

关键点

  • 条件判断 ( i <= 10 ) 更加直观,无需使用 -gt 等符号。
  • 无需显式引用变量 $,代码更清晰。
  • (())返回运算结果(0 为假,非零为真),可直接用于条件判断,支持逻辑、关系、位运算符等更多操作,支持复杂嵌套运算。

4 使用break和continue控制循环

在while循环中,可以结合 breakcontinue 实现更灵活的流程控制:

#!/bin/bash
counter=10
while (( counter > 0 ))
do
    if (( counter == 5 )); then
        echo "Breaking the loop at counter: $counter"
        break
    fi

    if (( counter % 2 == 0 )); then
        echo "Skipping even number: $counter"
        ((counter--))
        continue
    fi

    echo "Counter: $counter"
    ((counter--))
done
  • break 用于提前退出循环。
  • continue 用于跳过当前循环的剩余部分,直接进入下一次循环。

运行结果:

Skipping even number: 10
Counter: 9
Skipping even number: 8
Counter: 7
Skipping even number: 6
Breaking the loop at counter: 5

5 从文件读取数据的while循环

while 循环还能用于处理文件中的内容,例如逐行读取文件:

#!/bin/bash
filename="example.sh"
while IFS= read -r line
do
    echo "Processing: $line"
done < "$filename"
  • 关键点
    • 使用 IFS= 防止空格或换行符被忽略。
    • 使用 < "$filename" 将文件内容作为 while 循环的输入。

运行结果:

Processing: #!/bin/bash
Processing: filename="example.sh"
Processing: while IFS= read -r line
Processing: do
Processing:     echo "Processing: $line"
Processing: done < "$filename"

6 while循环中的无限循环

有些场景需要创建一个永不停止的循环,比如定期检测某些服务状态。可以这样实现:

#!/bin/bash
while true
do
    echo "Monitoring system... (Press Ctrl+C to stop)"
    sleep 5
done
  • true 是一个永远返回0(真)的命令,确保循环不会中断。
  • sleep 5 用于降低CPU使用率,暂停5秒后继续循环。

7 单中括号与双括号的选择建议

  • 使用 [ ]:如果条件中涉及字符串比较、文件检查或其他非算术操作,选择 [ ]
  • 使用 (( )):如果条件主要是数值计算或逻辑运算,选择 (( )) 更简洁高效。
  • 如果可能,优先选择 (( )),因为它性能更高,且语法直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值