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

文章目录

  • 一、循环语句
    • 1、for循环基础
    • 2、案例操作演示
      • 1.1 计算整 数和
      • 1.2 列出奇偶数
      • 1.3 计算出用户输入的数字,计算它的奇数和以及偶数和
      • 1.4 批量添加、删除用户
      • 1.4 根据ip地址列表查看主机状态
      • 1.5 密码验证
      • 1.6 随机抽奖
      • 1.7 九九乘法表
    • 2、while 语句
      • 2.1 while 语句说明
      • 2.2 列出1-100 之间能被3整除的数
      • 2.3 猜数字
      • 2.4 猜商品价格
      • 2.5 商场购物
      • 2.6 商场购物升级版
    • 3、until语句
  • 二、循环控制语句
    • 1、continue
    • 2、break
    • 3、exit
  • 三、总结

一、循环语句

1、for循环基础

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

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

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

for语句的执行流程

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

for循环基础演示1

shell之循环语句(for、while、until)_第1张图片

for循环基础演示2

shell之循环语句(for、while、until)_第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到该数所有整数的和

shell之循环语句(for、while、until)_第3张图片
shell之循环语句(for、while、until)_第4张图片

1.2 列出奇偶数

让用户随意输出一组数字,列出该数字内的奇偶数
shell之循环语句(for、while、until)_第5张图片
shell之循环语句(for、while、until)_第6张图片

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

shell之循环语句(for、while、until)_第7张图片
shell之循环语句(for、while、until)_第8张图片

1.4 批量添加、删除用户

批量创建用户

shell之循环语句(for、while、until)_第9张图片

shell之循环语句(for、while、until)_第10张图片

批量删除用户

shell之循环语句(for、while、until)_第11张图片
shell之循环语句(for、while、until)_第12张图片

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

shell之循环语句(for、while、until)_第13张图片
shell之循环语句(for、while、until)_第14张图片

1.5 密码验证

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

shell之循环语句(for、while、until)_第15张图片
shell之循环语句(for、while、until)_第16张图片

1.6 随机抽奖

定义一个抽奖池,在里面随机选取一个人,查看这个人出现的频率
shell之循环语句(for、while、until)_第17张图片
shell之循环语句(for、while、until)_第18张图片
shell之循环语句(for、while、until)_第19张图片

1.7 九九乘法表

正向输出
shell之循环语句(for、while、until)_第20张图片
shell之循环语句(for、while、until)_第21张图片

反向输出

shell之循环语句(for、while、until)_第22张图片
shell之循环语句(for、while、until)_第23张图片

2、while 语句

2.1 while 语句说明

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

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

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

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

执行流程

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

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

shell之循环语句(for、while、until)_第24张图片
shell之循环语句(for、while、until)_第25张图片

2.3 猜数字

随机生成一个1-100之间的数,用户去猜,猜中了,则可以退出循环,没猜对,则一直猜下去
shell之循环语句(for、while、until)_第26张图片
shell之循环语句(for、while、until)_第27张图片

2.4 猜商品价格

随机生成商品价格(1-1000),用户输入数字去猜,猜中了可以退出循环,并且告知猜的次数,没猜中则告知猜大了还是猜小了。
shell之循环语句(for、while、until)_第28张图片

shell之循环语句(for、while、until)_第29张图片

2.5 商场购物

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

shell之循环语句(for、while、until)_第30张图片
shell之循环语句(for、while、until)_第31张图片

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

shell之循环语句(for、while、until)_第32张图片
shell之循环语句(for、while、until)_第33张图片

3、until语句

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

语法结构

until 表达式
do
    command
done

案例:计算1-50 的和

shell之循环语句(for、while、until)_第34张图片
在这里插入图片描述

二、循环控制语句

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

1、continue

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

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

shell之循环语句(for、while、until)_第35张图片

shell之循环语句(for、while、until)_第36张图片

2、break

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

案例1:1-10的数字,7后面的都不打印
shell之循环语句(for、while、until)_第37张图片
shell之循环语句(for、while、until)_第38张图片

案例2:for循环嵌套中使用break跳出当前循环
shell之循环语句(for、while、until)_第39张图片
shell之循环语句(for、while、until)_第40张图片

3、exit

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

案例:
shell之循环语句(for、while、until)_第41张图片
shell之循环语句(for、while、until)_第42张图片

注意:

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

三、总结

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

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

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

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

你可能感兴趣的:(Shell脚本,linux,服务器,bash,运维)