循环语句

while循环

while循环是Shell脚本中最简单的一种循环, 当条件满足时, while重复地执行一组语句, 当条件不满足时, 就退出while循环.

Shell while循环的用法如下:

while condition
do
    statements
done

condition表示判断条件, statements表示要执行的语句(可以只有一条, 可以有多条, 但不能为空), dodone都是Shell中的关键字.

注解

while语句和if else语句中的condition用法都是一样的, 可以使用test[]命令, 也可以使用(())[[]].

Example:

#!/usr/bin/env bash

i=1
sum=0

while ((i <= 100))
do
    ((sum += i))
    ((i++))
done

echo "The sum is: $sum"

while无限循环的语法格式:

while :
do
    ...
done

或者

while true
do
    ...
done

until循环

until循环和while循环恰好相反, 当判断条件不成立时才进行循环, 一旦判断条件成立, 就终止循环.

until的使用场景很少, 一般使用while即可.

Shell until循环的用法如下:

until condition
do
    statements
done

condition表示判断条件, statements表示要执行的语句(可以只有一条, 可以有多条, 但不能为空), dodone都是Shell中的关键字.

Example:

#!/usr/bin/env bash

i=1
sum=0

until ((i > 100))
do
    ((sum += i))
    ((i++))
done

echo "The sum is: $sum"

for循环

C语言风格的for循环

C语言风格的for循环的用法如下:

for ((expr1; expr2; expr3))
do
    statements
done
  • expr1是初始化语句, expr2是判断条件, expr3在每次循环语句执行之后执行, 他们都是可选的,都可以省略(但分号必须保留);
  • statements是循环体语句, 可以有一条, 也可以有多条, 但是不能为空;
  • dodone是Shell中的关键字.

Example:

#!/usr/bin/env bash

sum=0

for ((i = 1; i <= 100; i++)
do
    ((sum += i))
    ((i++))
done

echo "The sum is: $sum"

注解

在Shell中, 对Shell变量赋值时, =两侧不能有空格; 但是在其它的情况下, 为了更好的代码格式, 可以在运算符的两侧加上空格.

Python风格的for in循环

Python风格的for in循环的用法如下:

for variable in value_list:
do
    statements
done

variable表示变量, value_list表示取值列表, in是Shell中的关键字.

每次循环都会从value_list中取出一个值赋给变量variable, 然后进入循环体, 直到取完value_list中的所有值, 循环就结束了.

Example:

#!/usr/bin/env bash

sum=0

for n in 1 2 3 4 5 6
do
    echo $n
    ((sum += n))
done

echo "The sum is: $sum"

对value_list的说明

取值列表value_list的形式有很多种.

  • 直接给出具体的值

可以在in关键字后面直接给出具体的值, 多个值之间用空格分隔.

Example:

#!/usr/bin/env bash

for str in "hello" "world" "welcome"
do
    echo $str
done
  • 给出一个取值范围

给出一个取值范围的具体格式为:{start..end}.

start表示起始值, end表示终止值(包括终止值), 注意中间用两个点号相连, 而不是三个点号.

注意

这种形式只支持数字和字母.

Exmaple:

#!/usr/bin/env bash

for n in {1..10}
do
    echo $n
done

# 输出从A到z之间的所有字符:
for c in {A..z}
do
    echo $c
done

输出字符时, Shell是根据ASCII码值来输出的.

  • 使用命令的执行结果

使用反引号``或者$()都可以取得命令的执行结果.

Example:

#/usr/bin/env bash

# 列出当前目录下的所有Shell脚本
for filename in $(ls *.sh)
do
    echo $filename
done
  • 使用Shell通配符

Shell通配符可以认为是一种精简化的正则表达式, 通常用来匹配目录或者文件, 而不是文本.

Example:

#/usr/bin/env bash

# 列出当前目录下的所有脚本文件
for filename in *.sh
do
    echo $filename
done
  • 使用特殊变量

Shell中有多个特殊变量, 例如: $# $* $@ $? $$等, 在value_list中就可以使用它们.

Example:

function func()
{
    for str in $@
    do
        echo $str
    done
}

func C++ Java Python C#

还可以省略value_list, 省略后的效果和使用$@一样.

Example:

function func()
{
    for str
    do
        echo $str
    done
}

func C++ Java Python C#