📜  Bash 脚本 - 直到循环

📅  最后修改于: 2022-05-13 01:57:33.453000             🧑  作者: Mango

Bash 脚本 - 直到循环

Bash 具有三种类型的循环结构,即 for、while 和 until。直到循环用于迭代一个命令块,直到所需的条件为假。

句法:

until [ condition ];
do
 block-of-statements
done

在这里,上述语法的流程将是 -

  • 检查状况。
  • 如果条件为假,则执行语句并返回步骤 1。
  • 如果条件为真,则程序控制移至脚本中的下一个命令。

例子:

#!/bin/bash
echo "until loop"
i=10
until [ $i == 1 ]
do
    echo "$i is not equal to 1";
    i=$((i-1))
done
echo "i value is $i"
echo "loop terminated"

输出:

无限循环使用直到

在这个例子中,直到循环是无限的,即它无限地运行。如果条件设置为直到循环始终为假,则循环变为无限。

程序:

#!/bin/bash
## This is an infinite loop as the condition is set false.
condition=false
iteration_no=0
until $condition
do
    echo "Iteration no : $iteration_no"
    ((iteration_no++))
    sleep 1
done

输出:

直到循环中断并继续

此示例使用 break 和 continue 语句来改变循环的流程。

  • break :此语句终止当前循环并将程序控制传递给以下命令。
  • continue:此语句结束循环的当前迭代,跳过它下面的所有剩余命令并开始下一次迭代。

程序

#!/bin/bash
## In this program, the value of count is incremented continuously.
## If the value of count is equal to 25 then, the loop breaks
## If the value of count is a multiple of 5 then, the program 
## control moves to the next iteration without executing
## the following commands.
count=1

# this is an infinite loop
until false
do
    
    if [[ $count -eq 25 ]]
    then
    
        ##   terminates the loop.
        break
    elif [[ $count%5 -eq 0 ]]
    then
    
        ## terminates the current iteration.
        continue
    fi
    echo "$count"
    ((count++))
done

输出:

直到具有单一条件的循环

这是仅检查一个条件的 until 循环的示例。

程序

#!/bin/bash
# This program increments the value of 
# i until it is not equal to 5
i=0
until [[ $i -eq 5 ]]
do
    echo "$i"
    ((i++))
done

输出:

具有多个条件的直到循环

直到循环可以与多个条件一起使用。我们可以使用 and : '&&'运算符and or: '||'运算符使用多个条件。

程序

#!/bin/bash
##  This program increments the value of 
## n until the sum is less than 20
##   or the value of n is less than 15
n=1
sum=0
until [[ $n -gt 15  || $sum -gt 20 ]]
do
    sum=$(($sum + $n))
    echo "n = $n & sum of first n = $sum"
    ((n++))
done

输出

命令的退出状态:

我们知道 shell 中的每个命令都会返回一个退出状态。退出状态为 0 表示执行成功,而非零值表示执行失败。直到循环执行直到条件返回非零退出状态。