📜  Bash While循环(1)

📅  最后修改于: 2023-12-03 14:59:28.436000             🧑  作者: Mango

Bash While循环

在Bash中,while循环是一种基本的控制结构,它允许我们重复执行代码块,直到满足某个条件才退出循环。在本文中,我们将会介绍如何编写while循环,及其各种使用方法。

基本的while循环

基本while循环的语法如下:

while [ condition ]
do
    command1
    command2
done

括号里的condition是在每次循环开始前执行的测试条件。如果测试结果为true,则执行do和done之间的命令。

例如:

#!/bin/bash

count=1

while [ $count -le 5 ]
do
    echo "Count is $count"
    let count+=1
done

echo "Finished"

在这个例子中,我们定义了变量count的初始值为1。然后在while循环中,我们测试了变量count是否小于或等于5。只要条件为真,我们就将“Count is”和变量count打印到终端,并将count的值增加1。在count大于5时,循环结束并输出“Finished”。

无限循环

无限循环是一种特殊类型的while循环。它是无限循环的,直到人为干预才会停止。下面是无限循环的语法:

while true
do
    command1
    command2
done

或者

while :
do
    command1
    command2
done

例如:

#!/bin/bash

while :
do
    echo "Press CTRL+C to stop the script"
    sleep 1
done

在这个例子中,我们使用while true或while :来定义一个无限循环,并将“Press CTRL+C to stop the script”消息输出到终端。我们使用sleep命令来暂停1秒,使循环在每次迭代之间暂停一秒钟。

Ctrl-C是用来停止脚本的通用方法。我们也可以使用其他方法停止脚本,例如在另一个终端中杀掉脚本。

until循环

until循环与while循环相似,但是只有在测试条件为false时才会执行循环中的代码。它的语法与while循环很相似:

until [ condition ]
do
    command1
    command2
done

例如:

#!/bin/bash

count=10

until [ $count -lt 1 ]
do
    echo $count
    let count-=1
done

echo "Finished"

在这个例子中,我们定义了count变量的初始值为10,并在循环开头测试了count是否小于1。由于这是错误的,所以循环会一直运行,直到count小于1。在每次循环中,我们都将count的值打印到终端,并将count减1。当count小于1时,循环结束并输出“Finished”。

控制循环

在循环结束之前,我们还可以使用break和continue语句来控制循环。

break

break语句用于立即停止循环,并退出循环。在while或until循环中,break会立即停止循环,并跳到done或until之后的下一条语句。

例如:

#!/bin/bash

count=1

while [ $count -le 5 ]
do
    echo "Count is $count"
    let count+=1

    if [ $count -eq 3 ]
    then
        break
    fi
done

echo "Finished"

在这个例子中,我们定义了变量count的初始值为1,并在循环每次迭代之前检查其值是否小于或等于5。如果条件是真的,我们就打印出“Count is”和count的当前值。在每次迭代中,我们都将count的值增加1。当变量count的值等于3时,我们使用break语句来立即退出循环。因此,在最后一次循环迭代之后,打印了“Finished”。

continue

continue语句用于跳过当前迭代的代码,并继续下一次迭代。在while或until循环中,continue会立即停止当前迭代,并返回循环的开头。

例如:

#!/bin/bash

count=1

while [ $count -le 5 ]
do
    if [ $count -eq 3 ]
    then
        let count+=1
        continue
    fi

    echo "Count is $count"
    let count+=1
done

echo "Finished"

在这个例子中,我们定义了变量count的初始值为1,并在循环每次迭代之前检查其值是否小于或等于5。如果条件是真的,我们就打印出“Count is”和count的当前值。在每次迭代中,我们都将count的值增加1。当变量count的值等于3时,我们使用continue语句来跳过此次迭代。因此,在第三次迭代中,由于count等于3,我们省略了打印的消息。然后我们继续执行循环,并在计数变量增加到5时停止。

示例

下面是一个演示如何使用while循环来读取文件行的脚本示例:

#!/bin/bash

filename=$1

while read line
do
    echo "$line"
done < $filename

在这个例子中,我们将$filename的值作为命令行参数传递给脚本。我们使用while read循环来读取文件中的每一行,并将其打印到终端。

在do和done之间的是要重复执行的代码块。read命令用于从文件中读取下一行。当文件到达末尾时,read命令将返回非零退出代码,并退出循环。

<操作符用于将文件的内容重定向到循环中的read命令。因此,每次迭代都会从文件中读取下一行。