您的位置:

Bash while loop: 简单掌握使用循环结构快速处理大量数据

一、while循环的基本概念

while是一种循环结构,用于重复执行一个代码块,直到指定的条件不再为真为止。while循环的基本语法如下:

while condition
do
    command1
    command2
    command3
done

执行过程为:

  1. 先判断条件
  2. 如果条件为真,则执行循环体中的指令
  3. 执行完毕后再次判断条件,如果为真,则再次执行循环,否则终止循环

例如,以下代码将在1至10之间打印所有偶数:

#!/bin/bash
i=0
while [ $i -le 10 ]
do
    if [ $(expr $i % 2) -eq 0 ]
    then
        echo $i
    fi
    i=$(expr $i + 1)
done

执行结果:

0
2
4
6
8
10

二、 while和until循环的区别

while循环是在条件为真的情况下执行代码块,而until循环是在条件为假的情况下执行代码块。因此,until循环是while循环的反义词。它的语法如下:

until condition
do
    command1
    command2
    command3
done

执行过程为:

  1. 先判断条件
  2. 如果条件为假,则执行循环体中的指令
  3. 执行完毕后再次判断条件,如果为假,则再次执行循环,否则终止循环

例如,以下代码将在1至10之间打印所有奇数:

#!/bin/bash
i=0
until [ $i -gt 10 ]
do
    if [ $(expr $i % 2) -ne 0 ]
    then
        echo $i
    fi
    i=$(expr $i + 1)
done

执行结果:

1
3
5
7
9

三、while循环常见用途

1、按行读取文件

while循环可以按行读取文件,比如:

#!/bin/bash
while read line
do
    echo $line
done < file.txt

执行结果会将file.txt文件中的每一行输出:

line1
line2
line3
...

2、循环处理命令结果

通过将命令输出传递给while循环,可以在循环中对其进行处理,例如:

#!/bin/bash
ps -ef | while read line
do
    echo $line | grep "ssh"
done

执行结果会将所有包含“ssh”关键字的进程筛选出来:

root      2831     1  0 10:13 ?        00:00:00 /usr/sbin/sshd -D
frank     2937  2831  0 10:13 ?        00:00:00 sshd: frank@pts/2

3、使用while循环进行计算

使用while循环进行计算是很实用的,例如下面的代码将计算1至100之间所有数的和:

#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
    sum=$(expr $sum + $i)
    i=$(expr $i + 1)
done
echo $sum

执行结果:

5050

四、while循环的一些注意事项

1、死循环

在while循环中如果没有更新循环条件,将会发生死循环,如下面的例子:

#!/bin/bash
i=0
while [ $i -lt 10 ]
do
    echo $i
done

这段代码将永远输出0,因为$i的值没有改变。为了避免死循环,需要在循环体中更新$i的值。

2、变量的值必须用双引号或大括号包含

在while循环中,如果使用变量,要注意变量的值必须用双引号或大括号包含,否则可能会出现意外错误。例如:

i=1
while [ $i -le 10 ]
do
    echo $i
    i=i+1
done

这里$i的值不会更新,因为i=i+1是一个字符串,而不是一个算术表达式。正确的写法应该是:

i=1
while [ $i -le 10 ]
do
    echo $i
    i=$(expr $i + 1)
done
i=1
while [ $i -le 10 ]
do
    echo $i
    i=$((i+1))
done

3、脚本执行时需要添加执行权限

如果你想运行bash脚本,记得在脚本上添加可执行权限,否则会报错。要添加权限,可以使用如下的命令:

chmod +x script.sh

其中,script.sh表示你要添加权限的脚本文件名。

五、结语

在Linux运维工作中,使用while循环进行快速处理大量数据非常实用。掌握while循环的基本语法、注意事项和常见用法,可以让你的工作更加高效便捷。