shell之循环语句(for、while、until)

一、循环语句

1、for循环基础

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。

  • for循环语句的语句结构
for   变量名   in   取值列表
do
    命令系列
done

或者
for ((i=*;i<=*;1++))
do
    命令序列
done

for语句的执行流程

  • 首先变量会在取值列表中拿去第一个值,然后去执行命令系列,执行完成后,再去拿取值列表的第二个值,然后再去执行命令序列,直到取值列表中值全部取完,后再去执行done,跳出循环。

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的偶数,中间为步长

2、案例操作演示

1.1 计算整 数和

用户随机输入一个小于100的整数,并计算从1到该数所有整数的和

在这里插入图片描述
在这里插入图片描述

1.2 列出奇偶数

让用户随意输出一组数字,列出该数字内的奇偶数
在这里插入图片描述
在这里插入图片描述

1.3 计算出用户输入的数字,计算它的奇数和以及偶数和

在这里插入图片描述
在这里插入图片描述

1.4 批量添加、删除用户

批量创建用户

在这里插入图片描述

在这里插入图片描述

批量删除用户

在这里插入图片描述
在这里插入图片描述

1.4 根据ip地址列表查看主机状态

在这里插入图片描述
在这里插入图片描述

1.5 密码验证

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

在这里插入图片描述
在这里插入图片描述

1.6 随机抽奖

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

1.7 九九乘法表

正向输出
在这里插入图片描述
在这里插入图片描述

反向输出

在这里插入图片描述
在这里插入图片描述

2、while 语句

2.1 while 语句说明

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

  • 适用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止,但是脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行
  • 循环体内的命令序列中应包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束循环。

while 循环语句的语法结构如下

while 条件测试操作
do
    命令序列
done

执行流程

  • 首先判断while后的条件测试操作结果,如果条件成立,则执行do … done 循环体中的命令序列
  • 执行完成之后,再进行判断测试条件,如果成立,则继续执行do …done循环体中的命令序列
  • 直到进行判断测试条件不成立,然后跳出while循环。

2.2 列出1-100 之间能被3整除的数

在这里插入图片描述
在这里插入图片描述

2.3 猜数字

随机生成一个1-100之间的数,用户去猜,猜中了,则可以退出循环,没猜对,则一直猜下去
在这里插入图片描述
在这里插入图片描述

2.4 猜商品价格

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

在这里插入图片描述

2.5 商场购物

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

在这里插入图片描述
在这里插入图片描述

2.6 商场购物升级版

共有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 元,欢迎下次光临"

在这里插入图片描述
在这里插入图片描述

3、until语句

跟while相反,条件为假进入循环,条件为真退出循环

语法结构

until 表达式
do
    command
done

案例:计算1-50 的和

在这里插入图片描述
在这里插入图片描述

二、循环控制语句

for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循环的情况,控制循环的命令有以下3个。

1、continue

解释: 继续,但不会执行循环特内下面的代码,重新下一次循环

案例1:打印1-5的数字,3不打印

在这里插入图片描述

在这里插入图片描述

2、break

解释: 打断,马上停止本次循环,执行循环体外的代码

案例1:1-10的数字,7后面的都不打印
在这里插入图片描述
在这里插入图片描述

案例2:for循环嵌套中使用break跳出当前循环
在这里插入图片描述
在这里插入图片描述

3、exit

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

案例:
在这里插入图片描述
在这里插入图片描述

注意:

如果在执行的脚本中,有exit退出当前程序的命令,如果使用source 进行执行该脚本的话,
那么将会退出终端程序,因为source命令是将脚本内的命令加载到系统环境中执行的,
那再执行exit的同时,也就是将exit命令在终端上进行执行,那么将会退出终端。

三、总结

循环语句有for、while和untile三种不格式的循环语句,前两种的执行效果一样,,用法上存在区别,until使用较少,与前面的语句刚好相反,注意break和continue和exit的使用方式。

  • break的使用方式: 跳出当前的循环,

  • continue的使用方式: 继续当前循环,此次循环后面将不会再输出,循环继续开始,

  • exit的使用方式: 退出当前终端,在执行的脚本的时候,尽量使用路径执行,如果使用source执行的话话,会把内部的变量加载到系统环境执行,那么将会退出终端程序。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值