for循环

for循环的用法主要有两种:(1)用in去遍历list中的每一个元素;(2)使用类似于C语言的语法

用in去遍历list中元素

in后面接静态list

#!/bin/bash
i=1
for day in Mon Tue Wed; do
    echo "day $i is : $day"
    i=$(expr $i + 1)
done

输出结果:

day 1 is : Mon
day 2 is : Tue
day 3 is : Wed

如果用双引号把Mon Tue Wed引起来,则list的长度会被看成是1

#!/bin/bash
i=1
for day in "Mon Tue Wed"; do
    echo "day $i is : $day"
    i=$(expr $i + 1)
done

输出结果:

day 1 is : Mon Tue Wed

in后面接变量

#!/bin/bash
i=1
str="Mon Tue Wed"
for day in $str; do
    echo "day $i is : $day"
    i=$(expr $i + 1)
done

输出结果:

day 1 is : Mon
day 2 is : Tue
day 3 is : Wed

如果,把$str用双引号引起来,list的也被看作是只有一个元素

#!/bin/bash
i=1
str="Mon Tue Wed"
for day in "$str"; do
    echo "day $i is : $day"
    i=$(expr $i + 1)
done

输出结果:

day 1 is : Mon Tue Wed

unix命令的输出作为list

#!/bin/bash

for word in $(echo "hello world"); do
    echo $word
done

输出结果:

hello
world

in遍历数组

#!/bin/bash

array=("Mon" "Tue" "Wed")
for element in ${array[@]}; do
    echo $element
done

输出

Mon
Tue
Wed

in后面接数字区间

#!/bin/bash

for i in {1..4}; do
    echo $i
done

输出结果:

1
2
3
4

数字区间跨度为2

#!/bin/bash

for i in {1..10..2}; do
    echo $i
done

输出结果:

1
3
5
7
9

遍历文件或目录

假设/home/docker/目录下有a.txt文件和rpm文件夹

#!/bin/bash

cd /home/docker
for dir_or_file in *; do
    echo $dir_or_file
done

输出结果:

a.txt
rpm

break语法

#!/bin/bash

for day in Mon Tue Wed; do
    if [[ $day = Tue ]]; then
        break
    fi
    echo $day
done

输出结果:

Mon

continue语法

#!/bin/bash

for day in Mon Tue Wed; do
    if [[ $day = Tue ]]; then
        continue
    fi
    echo $day
done

输出结果:

Mon
Wed

类似C语言的用法

类C语言语法

#!/bin/bash

for (( i=1; i<=3; i++ )); do
    echo $i
done

输出结果:

1
2
3

Last updated

Was this helpful?