循环概述
含义
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
循环类型
遍历(traversal) - 按规则访问非线性结构中的每一项。
迭代(iterate) - 按顺序访问线性结构中的每一项。
递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。
循环原理

程序先进行语句判断,如为是则执行循环语句,然后继续进行语句判断,知道语句判断失败直接结束循环
常见的循环类型
for
for需要知道循环的次数
读取不同的变量值,用来逐个执行同一组命令
语句结构
{}和seq在for循环中的应用
| for i in {1..50..2} 1-50之间的奇数 |
| for i in {2..50..2} 1-50之间的偶数 |
| 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之间的奇数 |
| for i in $(seq 2 2 10) 1-10之间的偶数 |
带列表循环
| |
| 从1~100累加求和 |
| |
| |
| sum=0 |
| for i in {1..100} |
| do |
| sum=$[i+sum] |
| done |
| echo $sum |
| |
| 或者: |
| let sum=$i+$sum |
| let sum+=i |


| |
| 求出1-100之间奇数累加和 |
| |
| |
| sum=0 |
| for i in {1..100..2} |
| do |
| sum=$[sum+i] |
| done |
| echo $sum |


不带列表循环
| |
| for 变量名 {取值列表} |
| do |
| 循环动作 |
| done |
| |


类C循环
| |
| for (( 表达式1 ;表达式2;表达式3 )) |
| do |
| 执行内容 |
| done |
| 表达式1:定义变量并赋值 |
| 表达式2:决定是否循环 |
| 表达式3:决定循环变量如何改变,决定循环什么时候结束 |
| #示例 |
| 1-10相加求和 |
| |
| #!/bin/bash |
| for ((i=1;i/dev/null |
| done |


批量改后缀名
| #!/bin/bash |
| cd /data/test |
| for i in * |
| |
| do |
| name=`echo $i|awk -F '.' '{print $1}'` |
| |
| mv $i ${name}.bak |
| |
| done |


while和until
相对于for,需要知道循环次数
while和until只知道停止条件,不知道次数,就需要使用while
直到达到条件
while
| |
| while |
| 当命令判断为假时停止 |
| |
| |
| while 判断条件 |
| do |
| 需要循环的事件 |
| done |
死循环
| while true |
| do |
| echo "这是一个死循环" |
| done |


只能用Ctrl + C 停止
求和
| #!/bin/bash |
| i=0 |
| sum=0 |
| while [ $i -le 100 ] |
| do |
| let sum+=$i |
| let i++ |
| done |
| echo $sum |


猜价格游戏
| #!/bin/bash |
| p=`echo $[RANDOM%100+1]` |
| t=0 |
| |
| while true |
| do |
| read -p "请输入你所猜测的商品价格:" num |
| let t++ |
| if [ $num -eq $p ] |
| then |
| echo "恭喜恭喜,你猜中了,实际价格为$p" |
| echo "你一共猜了${t}次" |
| exit 0 |
| elif [ $num -gt $p ] |
| then |
| echo "你猜高了" |
| else |
| echo "你猜低了" |
| fi |
| done |


until
| |
| until |
| 当命令判断为真时停止 |
| |
| until 循环条件 |
| do |
| 循环内容 |
| done |
| |
求和
| #!/bin/bash |
| i=0 |
| sum=0 |
| while [ $i -le 100 ] |
| do |
| let sum+=$i |
| let i++ |
| done |
| echo $sum |


退出循环
exit
当执行 exit 语句后,脚本将立即终止,并且不会再执行后续的代码。
| #!/bin/bash |
| |
| while true |
| do |
| |
| if [ 条件 ] |
| then |
| exit |
| fi |
| |
| |
| done |
break
跳出单个循环后面加数字2则代表跳出两层循环
break 具体数字
| #!/bin/bash |
| for i in {1..10} |
| do |
| if [ $i -eq 5 ] |
| then break 2 |
| fi |
| echo i=$i |
| done |
continue
终止某次循环中的命令,但是不会完全终止命令
| #!/bin/bash |
| for i in {1..10} |
| do |
| if [ $i -eq 5 ] |
| then continue 2 |
| fi |
| echo i=$i |
| done |