之前的章节中提到的if判断语句和case语句都只能做一次判断,当我们想要多次自动让这个脚本反复执行的时候就需要用到循环语句。
循环语句主要有三种:for循环,while循环和until循环。
在工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。例如,根据通讯录中的姓名列表创建系统账号,根据服务器清单检查各主机的存活状态。
当面对各种列表重复任务时,使用简单的 if 语句已经难以满足要求,而顺序编写全部代码更是显得异常烦琐、困难重重。
for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的。
语法结构:(1)列表循环(2)不带列表循环(3)类C风格的for循环
for $变量 in {list} #将list中的值以遍历的方式赋值给变量
do
command #使用每个变量去执行命令,直到全部执行完毕
done
for i in {1..5} #{}里面不识别变量而是将1到5分别赋值给i
do
echo $i #输出结果是1 2 3 4 5
done
或使用seq命令(seq命令后面可以使用变量)
for i in `seq 5` #seq 5=1、2、3、4、5序列
do
echo $i #输出结果同样是1 2 3 4 5
done
for i in {1..5}
do
echo hello world
done
#虽然我们定义了一个变量i,但是没有使用它,它只是控制循环次数,所以会输出5遍hello world
#输出0-50之间的偶数
for i in {0..50..2} #..2代表步长为2,表示每隔2个
do
echo $i
done
或使用seq命令
for i in `seq 0 2 50` #表示从0开始,每隔2个,一直到50
do
echo $i
done
不带列表循环执行时由用户指定参数和参数的个数决定的。
for $变量
do
command
done
执行脚本+变量参数
例1:将{list}中的参数作为次数放在命令行中写
把a赋值给变量i,i有值了它就开始执行do…done了。
例2:将{list}中的参数作为变量放在命令行中写
类C风格表示类似于C语言,语法结构为:
for ((i=1;i<=5;i++)) #i从1开始,i最终小于等于5,i每次自加1
do
echo $i #输出1 1+1 1+1+1 1+1+1+1 1+1+1+1+1
done
执行结果为1 2 3 4 5
注:i++ : i=1+1 先赋值再运算 i=1 之后 再 +1
++i : 1+1=i 先运算再赋值 1+1 之后 再 =i
类C风格运算符用法:
++ | 自身变量+1 |
---|---|
– | 自身变量-1 |
+=n | 自身变量+n |
-=n | 自身变量-n |
*=n | 自身变量*n |
/=n | 自身变量/n |
%=n | 自身变量%n |
例:计算出10以内的奇数和,并打印。
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环。
语法结构:
while 表达式
do
command
done
例:打印1-10的和
while死循环:当我们写一个永远为真的表达式时,while就会一只循环下去不会跳出,因为while结束循环的标准是当结果输出为假的时候。例如
while [ 1 -eq 1 ] #当1等于1的时候
do
echo "1" #输出1
done
这个脚本一旦执行就会一直继续下去除非停止进程。
例:用while循环写猜数字游戏
跟while相反,条件为假进入循环,条件为真退出循环。
语法结构:
until 表达式
do
command
done
例:显示1-10的整数
for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循环的情况,控制循环的命令有以下3个。
1.continue:继续,但不会执行本次循环下面的代码了,开始重新开始下一次循环。
2.break:打断,马上停止本次循环,执行循环外的代码。
3.exit:直接跳出程序,后面可跟状态返回码如exit 1等等。
for一般用于固定次数循环,当你值列表给4个值的时候,就循环4次,5个值就5次。
while和until一般用于非固定次数循环,只要条件测试为真,就一直循环do和done中的命令。
END