循环结构是Shell程序设计语言的另外一种常用的流程控制结构
一、循环语句for
1. 带列表的for循环语句
基本语法如下:
for variable in {list}
do
statement1
statement2
......
done
在上面的语法中,variable称为循环变量,list是一个列表,可以是一系列的数字或者字符串,元素之间使用空格隔开。
#!/usr/bin/env bash
for var in 1 2 3 4 5
do
echo ${var}
done
for var in {1..5}
do
echo ${var}
done
Shell允许用户指定for语句的步长,当用户需要指定步长时,其基本语法如下:
for variable in {start..end..step}
do
statement1
statement2
......
done
举个例子:
#!/usr/bin/env bash
num=0
for i in {1..20..2}
do
let "num += i"
done
echo ${num}
Output:
$ sh test.sh
100
2. 不带列表的for循环
再某些特殊情况下,for循环的条件列表可以完全省略,称为不带列表的for循环语句。语法如下:
for variable
do
statement1
statement2
......
done
由于系统变量$@同样可以获取所有的参数,所以以上的语法等价于一下的的语法:
for variable in $@
do
statement1
statement2
......
done
也同样等价于下面的语法:
for variable in $*
do
statement1
statement2
......
done
#!/usr/bin/env bash
for args
do
echo ${args}
done
Output:
$ sh test.sh a b c d
a
b
c
d
3. 类C风格的for循环语句
基本语法如下:
for ((expression1;expression2;expression3))
do
statement1
statement2
......
done
在上面的语法中,执行条件分为三个部分,expression1通常是条件变量的初始化语句,expression2是决定循环是否退出的语句,expression3是用来改变条件变量值的。
#!/usr/bin/env bash
for ((i=0;i<5;i++))
do
echo ${i}
done
Output:
$ sh test.sh
0
1
2
3
4
4.使用for循环处理数组元素
针对数组,Shell专门提供了一种特殊语法的for循环语句,其基本语法如下:
for variable in ${array[*]}
do
statement1
statement2
......
done
举个例子:
#!/usr/bin/env bash
array=(1 2 3 4 5 6)
for var in ${array[*]}
do
echo ${var}
done
Output:
$ sh test.sh
1
2
3
4
5
6
二、until循环语句
1.until 语句的基本语法
until循环语句的功能是不断地执行循环体中的语句,知道某个条件成立。
until expression
do
statement1
statement2
......
done
在上面的语法中,expression是一个条件表达式,当该表达式为0时,退出循环。
2. 利用until语句批量增加用户
#!/usr/bin/env bash
i=0
until [ "$i" -eq 5 ]
do
#执行useradd命令添加用户
useradd user${i}
#修改初始密码
echo "password" | password --stdin user${i} > /dev/null
#循环变量增加
i++
done
until [ "$i" -eq 5 ]
do
#依次删除用户
userdel -r user${i}
i++
done
三、while循环语句
while循环语句的基本语法如下:
while expression
do
statement1
statement2
......
done
当expression为非0时退出循环。
#!/usr/bin/env bash
i=0
#当i大于5时退出循环
while [ "$i" -le 5 ]
do
echo $[i++]
done
Output:
$ sh test.sh
0
1
2
3
4
5
五、利用break和continus语句控制循环
1.break语句
break语句的作用是立即跳出当前的循环体,可以在for、while或者until等循环语句的循环中使用,如果有多重循环则可以通过在break后面接数字的方式指定退出几层循环。
#!/usr/bin/env bash
for ((i=0;i<5;i++))
do
echo -n "${i} "
for args in a b c d
do
echo -n "${args} "
if [ "${args}" == b ];then
break 2
fi
done
done
Output:
$ sh test.sh
0 a b
2. continue语句
continue语句的作用是停止本次循环,然后进入下一次循环,可以用在for、while或者until等循环语句的循环中,如果有多重循环则可以通过在continue后面接数字的方式指定停止那一层循环。
#!/usr/bin/env bash
for ((i=0;i<5;i++))
do
echo -n "${i} "
for args in a b c d
do
echo -n "${args} "
if [ "${args}" == b ];then
continue 2
fi
done
done
Output:
$ sh test.sh
0 a b 1 a b 2 a b 3 a b 4 a b