一、循环定义
一组被重复执行的语句称之为 循环体,能否继续重复,决定循环的终止条件。 循环语句 是由循环体及循环的终止条件两部分组成的。
二、for循环
2.1 带列表循环
语法
for 变量名 in 取值列表do 命令序列 done
花括号用法:
花括号{ }和seq在for循环的应用:
for i in {1..10..2} 1-10的奇数
for i in {0..10..2} 1-10的偶数
for i in {10..1} 1-10倒序排列
for i in $(seq 10) 1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇数,中间为步长
运用演示1:列表打印
需求:打印一份一到十的数字列表
#!/bin/bashfor i in {1..10}
do
echo $i
done
运用演示二:分类打印
需求:打印一份 0-10以内的奇数列表
for i in {1..10..2}
do
echo $i
done
脚本
#!/bin/bash
for i in {1..10..2}
do
echo $i
done
需求二:打印一份0-10以内的偶数列表
for i in {0..10..2}
> do
> echo $i
> done
用脚本写
#!/bin/bash
for i in {0..10..2}
do
echo $i
done
运用演示三:累加求和
需求:求从1加到10的和
sum=0
for i in {1..10}
> do
> sum=$[sum+i]
> done
echo $sum
55
脚本求1加到100的和
#!/bin/bash
i=0
sum=0
for i in {1..100}
do
sum=$[sum +i]
let i++
done
echo $sum
2.2 不带列表循环
语法
for 变量名
do
命令
done
运用演示:打印hello
#!/bin/bash
for i
do
echo hello
done
注意:脚本需要执行权限,i也要赋予一个值
2.3 类似c语言格式的循环
语法
for ((表达式1;表达式2;表达式3))
do
命令
done
表达式1:定义变量并赋值表达式2:决定是否循环表达式3:决定循环变量如何改变,决定循环什么时候结束
配合命令let使用
++ 自身变量+1
-- 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5 自身变量*5
/=5 自身变量/5
%=5 自身变量%5
运用演示:从1+到100
#!/bin/bash
i=0
sum=0
for ((i=0;i<=100;i++))
do
sum=$[sum+i]
done
echo $sum
三、while 循环
3.1 while 语法结构
语法
while [ 判断条件] 使用while循环满足条件执行do,不满足不执行 do 执行动作 while循环执行动作done while循环结束标志
应用演示:求和
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum
3.2 死循环语句
1.while [1 -eq 1] 判断条件写一个永久为真的条件
do 一直执行do内的命令
done
2.while true 直接写判断条件为真
do 一直执行do内的命令
done
3.while : 判断条件为冒号也表示死循环
do 一直执行do内的命令
done
四、双重循环及跳出循环
4.1 双重循环的机制
单层循环:执行命令从上至下依次执行命令,进行条件判断,如果没有达到退出循环的要求,
便再次进行该操作
双重循环:循环中嵌套循环(在这里我们将外面的循环称作外部循环,嵌套在里面的叫内部循环)
当外部循环执行一次时,内部循环就要将自身的所有循环进行一遍,一整个双重循环结束后,内部循环执行的次数等于自己本身循环的所有次数乘以外部循环的所有循环次数
运用演示:
#!/bin/bash#这是一个双重循环的测试实验for ((i=1;i<=5;i++))
doecho "=============这是外部循环执行的第 $i 次==================== "for ((j=1;a<=5;j++))doecho "这是内部循环执行的第 $j 次" done
done
打印九九乘法表
#!/bin/bash
for((i=1;i<=9;i++))
dofor((j=1;j<=i;j++))doecho -e "${i}*${j}=$[i*j]\t\c"done
echo
done
4.2 跳出循环
break跳出单个循环 break n 数字数字是几代表跳出n层循环
continue终止某次循环中的命令,但是不会完全终止命令
exit 直接退出脚本
4.2.1 continue跳出循环
1.表示满足continue条件时跳出循环,但是不影响后续循环执行
举例:
vim test1.sh #创建脚本a.sh
脚本内容:
#!/bin/bash
for i in {1..10} #for循环10次从i=1开始到i=10
do
if [ $i -eq 3 ] #if判断语句,若$1等于3则执行then的内容
then
continue #当$i=3时跳出循环但不影响后面循环
fi #结束if语句
echo $i #没执行一次for循环输出一次$i
done #for循环结束语句
bash test1.sh #调用shell执行脚本
输出结果
1
2
4
5
6
7
8
9
10
4.2.2 break跳出循环
在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。
break [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环
举例:
vim a.sh #创建a.sh脚本
脚本内容:
#!/bin/bash
for j in {1..3} #第一层for循环,j=1,2,3各执行一次do的内容
do #第一层for循环的执行内容for i in {1..5} #第二层for循环,i=1,2,3,4,5各执行一次do的内容do #第二层for循环的执行内容 if [ $i -eq 3 ] #第二层for循环中添加的if判断语句,当$i=3是执行then内容then break #第二层for循环判断语句执行命令,break结束循环fi #if语句结束echo "$i" #第二层for循环语句执行每循环一次输出$idone #第二层for循环语句结束标志
done #第一层for循环语句结束标志
bash a.sh #调用bash执行a.sh脚本
执行结果:第二层执行在$i=3是结束了循环,所以只能输出1和2,第一层for循环是循环3次,所以输出了3次。
1
2
1
2
1
2
4.2.3 exit跳出脚本
#!/bin/bash
for j in {1..3} #第一层for循环,j=1,2,3各执行一次do的内容
do #第一层for循环的执行内容for i in {1..5} #第二层for循环,i=1,2,3,4,5各执行一次do的内容do #第二层for循环的执行内容 if [ $i -eq 3 ] #第二层for循环中添加的if判断语句,当$i=3是执行then内容then#break #第二层for循环判断语句执行命令,break结束循环exit 第二层for循环判断语句执行命令,exit结束循环fi #if语句结束echo "$i" #第二层for循环语句执行每循环一次输出$idone #第二层for循环语句结束标志
done #第一层for循环语句结束标志
五、until循环
until循环与for,while循环不同的是,until循环是只要条件不符合就会一直循环,直到条件符合后才会退出循环
语句格式:until 条件测试操作 do 命令序列 done
运用演示:求和
#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ]
do
sum=$[sum+i]
let i++
done
echo $sum
总结:
1. 掌握好三种循环的用法(特别是until和前两种循环对于条件判断是相反的)
2.for循环读取文件时,如果遇到未按照默认分隔符隔开的文件,可以通过修改分隔符来实现正常读取(但是先备份分隔符的默认值,再进行修改,最后进行还原)