Bash while 循环系统

评论 0 浏览 0 2018-11-26

循环是编程语言的基本概念之一。当你想多次运行一系列命令直到满足一个特定条件时,循环就很方便。

在Bash这样的脚本语言中, 循环对于重复性任务的自动化非常有用。在Bash脚本中,有三种基本的循环结构:for loopwhile loop,以及until loop

本教程包括Bash中while循环的基础知识。我们还将告诉你如何使用breakcontinue语句来改变循环的流程。

Bash while 循环

只要给定的条件评估为 "真",while 循环就会被用来执行一组未知次数的命令。

Bash while 循环的形式如下。

while [CONDITION]
do
  [COMMANDS]
done

while语句是以while关键字开始的,后面是条件表达式。

在执行命令之前,要对条件进行评估。如果条件评估为真,命令就被执行。否则,如果条件评估为假,循环就会终止,程序控制将被传递给后面的命令。

在下面的例子中,在每一次迭代中,变量i的当前值被打印出来,并且递增一个。

i=0

while [ $i -le 2 ]
do
  echo Number: $i
  ((i++))
done

只要i小于或等于2,循环就会迭代。它将产生以下输出:

输出

Number: 0
Number: 1
Number: 2

无限 while 循环

无限循环是一个无限重复且永不终止的循环。如果条件总是评估为真,你就得到一个无限循环。

在下面的例子中,我们使用内置命令:来创建一个无限循环。:总是返回真。你也可以使用内置的true或任何其他总是返回真的语句。

while :
do
  echo "Press <CTRL+C> to exit."
  sleep 1
done

上面的while循环将无限期地运行。你可以通过按CTRL+C来终止这个循环。

下面是一个单行的等效项。

while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done

逐行读出文件

while循环最常见的用途之一是逐行读取一个文件、数据流或变量。

下面是一个例子,它逐行读取/etc/passwd文件,并打印出每一行。

file=/etc/passwd

while read -r line; do
  echo $line
done < "$file"

我们不是用一个条件来控制while循环,而是用输入重定向(< "$file")来传递一个文件给read命令,由它来控制循环。while循环将运行到最后一行被读取。

当逐行读取文件时,总是使用read-r选项,以防止反斜线作为转义字符。

默认情况下,read命令会修剪前导/后导的空白字符(空格和制表符)。在read之前使用IFS=选项来防止这种行为。

file=/etc/passwd

while IFS= read -r line; do
  echo $line
done < "$file"

breakcontinue声明

breakcontinue 语句可以用来控制while循环的执行。

break 陈述

break语句终止当前的循环,并将程序控制权传递给被终止的循环之后的命令。它通常被用来在满足某个条件时终止循环。

在下面的例子中,一旦当前的迭代项等于2,循环的执行就会被中断。

i=0

while [ $i -lt 5 ]
do
  echo "Number: $i"
  ((i++))
  if [[ "$i" == '2' ]]; then
    break
  fi
done

echo 'All Done!'

输出

Number: 0
Number: 1
All Done!

continue 陈述

continue语句退出循环的当前迭代,并将程序控制权传递给循环的下一个迭代。

在下面的内容中,一旦当前的迭代项等于2continue语句将导致执行返回到循环的起点,并继续进行下一次迭代。

i=0

while [ $i -lt 5 ]
do
  ((i++))
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Number: $i"
done

echo 'All Done!'

输出

Number: 1
Number: 3
Number: 4
Number: 5
All Done!

总结

只要一个条件为真,while循环就会重复执行一组给定的命令。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-07-23
0 个评论
标签