在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。
for 变量名 in 取值列表
do
命令系列
done
或者
for ((i=*;i<=*;1++))
do
命令序列
done
for语句的执行流程
for循环基础演示1

for循环基础演示2

基础小技巧花括号{}和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 0 2 10) 1-10的偶数,中间为步长
用户随机输入一个小于100的整数,并计算从1到该数所有整数的和


让用户随意输出一组数字,列出该数字内的奇偶数




批量创建用户


批量删除用户




让一个用户进行输入密码验证,输入错误重新输入,最多只能输入三次,输入正确即可进入


定义一个抽奖池,在里面随机选取一个人,查看这个人出现的频率



正向输出


反向输出


for循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数,操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合适用另一种循环-----while语句
while 循环语句的语法结构如下
while 条件测试操作
do
命令序列
done
执行流程


随机生成一个1-100之间的数,用户去猜,猜中了,则可以退出循环,没猜对,则一直猜下去


随机生成商品价格(1-1000),用户输入数字去猜,猜中了可以退出循环,并且告知猜的次数,没猜中则告知猜大了还是猜小了。


让用户选择是否进入店中购物,最多只能进三家购物,每家店中有商品和价格进行展示,用户选择进行购买,最后累加用户所购买的全部商品的价格。


共有4家店铺,用户分别逛,用户可以选择是否继续购买,以及是否进入下一家店铺,和是否进入店铺,结束时打印逛店次数,购买的商品总数,总金额。
#!/bin/bash
ack=1 #是否进入购物
ack2=1 #是否还逛下一家店铺
i=1 #第几家店铺
sum=0 #购买的总金额
num=0 #购买商品的数量
num2=0 #逛了几次店
while [ $i -le 4 -a $ack2 -eq 1 ] #店铺小于4次,或者ack=1时才可进行购物
do
echo "共有四家店铺,现在进入第$i 家店铺"
read -p "是否进入第 $i 家店铺?(yes/no):" ack
let num2++ #每进一家店计数加1
while [ $ack = "yes" ] #用户输入yes才可进入店铺购物
do
echo "店中有多种商品,商品明细如下:"
echo "1:衣服¥200
2:鞋子¥150
3:手套¥40
4:裤子¥155"
read -p "请输入你购买的商品:" ping
case $ping in #进行匹配用户所选择的商品
1)
echo "衣服购买成功"
sum=$[$sum+200] #购买后,总价加上本次金额
let num++ #购买成功后,购买次数加1
;;
2)
echo "鞋子购买成功"
sum=$[$sum+150]
let num++
;;
3)
echo "手套购买成功"
sum=$[$sum+40]
let num++
;;
4)
echo "裤子购买成功"
sum=$[$sum+155]
let num++
esac
read -p "是否继续购买(yes/no):" yon #购物完成后,用户选择是否还继续在本店进行购物
if [ $yon = "yes" ] ;then
ack=yes #选择yes,继续购物
else
ack=2 # 选择no,则不在此店进行购物
fi
done
let i++ #进入下一店开始购物
if [ $i -le 4 ];then #如果剩余的店铺还有,则继续,没有则结束
read -p "是否还继续逛下一家店铺?(yes/no):" yon2 #用户选择是否进入下一家店铺
if [ $yon2 = "yes" ];then
ack2=1 #如果进入则继续购物
else
ack2=2 #如果不进入则结束
fi
fi
done
echo "您已购买完所有的商品,逛了$num2 次店,购买了 $num 件商品,总价为:$sum 元,欢迎下次光临"


跟while相反,条件为假进入循环,条件为真退出循环
语法结构
until 表达式
do
command
done
案例:计算1-50 的和


for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循环的情况,控制循环的命令有以下3个。
解释: 继续,但不会执行循环特内下面的代码,重新下一次循环
案例1:打印1-5的数字,3不打印


解释: 打断,马上停止本次循环,执行循环体外的代码
案例1:1-10的数字,7后面的都不打印


案例2:for循环嵌套中使用break跳出当前循环


解释: 接跳出程序,后面可跟状态返回码,如exit1 等等
案例:


注意:
如果在执行的脚本中,有exit退出当前程序的命令,如果使用source 进行执行该脚本的话,
那么将会退出终端程序,因为source命令是将脚本内的命令加载到系统环境中执行的,
那再执行exit的同时,也就是将exit命令在终端上进行执行,那么将会退出终端。
循环语句有for、while和untile三种不格式的循环语句,前两种的执行效果一样,,用法上存在区别,until使用较少,与前面的语句刚好相反,注意break和continue和exit的使用方式。
break的使用方式: 跳出当前的循环,
continue的使用方式: 继续当前循环,此次循环后面将不会再输出,循环继续开始,
exit的使用方式: 退出当前终端,在执行的脚本的时候,尽量使用路径执行,如果使用source执行的话话,会把内部的变量加载到系统环境执行,那么将会退出终端程序。