在 Bash 中使用 While 循环
在运行 bash 脚本时,您会遇到想要重复运行任务的情况,例如多次按照特定模式打印变量的值。
在本教程中,我将引导您完成以下内容:
- while 循环的语法
- while 循环的多个示例
因此让我们从第一个开始。
如何在 Bash 中使用 while 循环
与任何其他循环一样,while 循环确实有一个条件语句,并且条件是迭代循环的关键因素。
你看,每当你开始循环时,你必须给循环一个条件,循环只会迭代直到条件有效。
例如,您有一个变量a
的值为 2。并且您想使用循环直到该值增加到 10。
因此在这种情况下,您要做的就是指定一个条件,其中变量的值应该等于10
,并且在代码块部分,您可以使用增量函数,它将在每次交互中增加该值。
要使用 while 循环,可以参考以下语法:
while condition
do
#code-block
done
让我为您分解一下语法。
condition
是一个条件语句,每次循环之前都会检查该条件语句,如果条件仍然为真,则循环将被循环。do
表示循环体的起点。#code-block
是您放置要执行的命令或代码块的地方,直到指定的条件为假。done
标记循环体的结束。
还是很困惑?我们来看一个简单的例子。
这是一个打印从 1 到 10 的简单循环:
#!/bin/bash
counter=1
while [ $counter -le 10 ];
do
echo $counter
counter=$((counter+1))
done
让我们分解一下。
counter=1
:是一个名为的变量counter
,初始化为1。[ $counter -le 10 ]
:这是一个条件,意味着只要counter
变量的值小于或等于 10,循环就会进行迭代。echo $counter
:打印变量的当前值counter
。counter=$((counter+1))
:将变量的值增加counter
1。
执行后,您可以预期以下结果:
想要更多类似的例子吗?这里有!
1. 使用 while 循环创建计时器
是的,您可以使用 while 循环创建一个计时器。
让我先分享代码,然后我会解释它:
#!/bin/bash
seconds=10
while [ $seconds -gt 0 ]; do
clear
echo "Timer: $seconds seconds"
sleep 1
seconds=$((seconds-1))
done
echo "Timer up!"
首先,我初始化变量的值seconds
=10。
[ $seconds -gt 0 ]
是循环的条件,检查seconds
变量是否大于 0。如果是,则启动循环。clear
:清除命令用于清除终端控制台。sleep 1
:睡眠一秒钟。seconds=$((seconds-1))
:将变量的值减少seconds
1。echo
:打印给定的文本或变量。
如果你执行上述脚本,你将得到以下结果:
2.逐行读取文件
有时您想要逐行读取文件的内容,在这种情况下,您可以使用 while 循环,如下所示:
#!/bin/bash
filename="data.txt"
while IFS= read -r line
do
echo "$line"
done < "$filename"
这里,filename
变量存储您想要逐行读取的文件的名称。
IFS= read -r line
逐行读取文件并将数据存储在line
变量中。echo $line
打印变量的值line
。done
标记循环的结束语句。< "$filename"
指示循环使用来自filename
变量的文件。
?
确保与您的文件交换
data.txt
并将其放在与脚本相同的目录中。执行后,您可以预期以下结果:
3. 文件行计数器
有时候你的文件有数千行,但是如果你想计算行数怎么办?在这种情况下,你可以使用 while 循环:
#!/bin/bash
filename="example.txt"
line_count=0
while IFS= read -r line; do
line_count=$((line_count + 1))
done < "$filename"
echo "Total lines: $line_count"
这里,
filename="example.txt"
意味着filename
变量存储了您想要进行行数计算的文本文件的文件名(在我的情况下为example.txt)。line_count=0
:该line_count
变量初始化为 0。read -r line
从文件读取每一行并将其存储到line
变量中。line_count=$((line_count + 1))
line_count
:每次循环迭代时,它都会增加变量的值。< "$filename"
:它指示循环使用存储在$filename
变量中的文件。
如果你使用相同的脚本,则会出现以下情况:
像你一样,也有特殊变量!
您知道 bash 中有特殊变量吗?
是的,bash 中有 9 种特殊变量。想知道它们是什么以及如何使用它们吗?请看这里:
希望本指南对您有所帮助。如果您对 while 循环仍有疑问,欢迎在评论中提问。