首页 > 编程笔记

Shell for in循环详解

for 循环是 Linux Shell 中最常用的结构。for 循环主要有两种常用的结构:第一种结构是列表 for 循环;第二种结构是 C 语言风格的 for 循环。

1、列表for循环结构

列表 for 循环语句用于将一组命令执行已知的次数,语句基本格式如下:

for variable in (list)
do
    commands
done

do 和 done 之间的命令成为循环体,执行次数和 list 列表中常数或字符串的个数相同。

list 参数中提供了迭代中需要使用的值,当执行 for 循环时,首先将 in 后的 list 列表的第一个常数或字符串赋给循环变量,然后执行循环体;接着将 list 列表中的第二个常数或字符串赋值给循环变量,再次执行循环体。这个过程将一直持续到 list 列表中无其他常数或字符串,然后执行 done 命令后的命令序列。

注意,在 for 循环中,参数列表可以是数字,也可以是字符串,但是输入是以空格进行分隔的,如果存在空格,脚本执行时会认为存在另一个参数。


【例 1】参数列表为常数。
使用 vim 编辑器打开脚本文件 test.sh,输入 i 命令进入插入模式,输入以下命令:

#!/bin/bash

for var in 1 2 3 4
do
    echo "$var:http://www.weixueyuan.net"
done

使用 sh(Bash)进程来执行脚本文件,输出结果为:

[root@bogon ~]# sh test.sh
1:http://www.weixueyuan.net
2:http://www.weixueyuan.net
3:http://www.weixueyuan.net
4:http://www.weixueyuan.net


【例 2】用字符串表示列表。
使用 vim 编辑器打开脚本文件 test.sh,输入 i 命令进入插入模式,输入以下命令:

#!/bin/bash

for day in Mon Tues Wed Thurs
do
    echo "$day:http://www.weixueyuan.net"
done

使用 sh(Bash)进程来执行脚本文件,输出结果为:

[root@bogon ~]# sh test.sh
Mon:http://www.weixueyuan.net
Tues:http://www.weixueyuan.net
Wed:http://www.weixueyuan.net
Thurs:http://www.weixueyuan.net

2、C语言风格for循环

C 语言风格的 for 循环会定义一个在每次迭代时自动改变的变量,通常将这个变量用作计时器,并且会让计数器在每次迭代中增加或减少。Bash中的 for 循环和 C 语言中的 for 循环类似。

Bash 中 C 语言风格的 for 循环的基本格式如下:

for ((variable assignment;condition;interation process))
do
    commands
done

使用类 C 风格 for 循环要注意以下事项:
在类 C 风格的 for 循环中,可以将三个语句全部忽略。例如:

for((; ;))
do
    echo "hello"
done


【例 3】直接输出。
使用 vim 编辑器打开脚本文件 test.sh,输入 i 命令进入插入模式,输入如下命令:

#!/bin/bash

for (( i=1; i <= 5;i++))
do
    echo "This is $i"
done

使用 sh(Bash)进程来执行脚本文件,输出结果为:

[root@bogon ~]# sh test.sh
This is 1
This is 2
This is 3
This is 4
This is 5


C 语言风格的 for 循环也允许使用多个变量,循环会单独处理每个变量,因此可以为每个变量定义不同的迭代过程。

【例 4】多个变量的使用。
使用 vim 编辑器打开脚本文件 test.sh,输入 i 命令进入插入模式,输入如下命令:

#!/bin/bash

for (( a=1,b=10; a <= 10;a++,b--))
do
    echo "$a-$b"
done

使用 sh(Bash)进程来执行脚本文件,输出结果为:

[root@bogon ~]# sh test.sh
1-10
2-9
3-8
4-7
5-6
6-5
7-4
8-3
9-2
10-1

注意,尽管可以使用多个变量,但只能在 for 循环中定义一种条件。

优秀文章