shell编程之循环语句 while、until

简介: 1 while循环语句用法:重复测试某个条件,只要条件成立则反复执行。使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。

1 while循环语句


用法:

  • 重复测试某个条件,只要条件成立则反复执行。
  • 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。

格式:

while  条件测试操作
 do
    命令序列
 done
复制代码


网络异常,图片无法展示
|


1.1 while语句的作用演示

1、打印0到10

[root@yuji sh]# a=0
 [root@yuji sh]# while [ $a -le 10 ]  //只要满足a≤10,就输出a的值,之后让a自增1
 > do
 > echo $a
 > let a++
 > done
 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 [root@yuji sh]# echo $a  //最后一次输出a的值后,a又加了1,所以现在a的值是11
 11
复制代码


网络异常,图片无法展示
|


2、不停地打印0

[root@yuji sh]# while [ $a -le 10 ]
 > do
 > echo $a
 > done
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 ......
复制代码


网络异常,图片无法展示
|


1.2 while循环应用示例

示例1:批量添加用户

要求:

  1. 用户名称以stu开头,按数字顺序进行编号
  2. 一共添加20个用户,即stu1、stu2、...... 、stu20
  3. 初始密码均设为123456

创建脚本:

[root@yuji ~]# vim while01.sh    //创建脚本
 #!/bin/bash
 #用户名称以stu开头,按数字顺序进行编号
 #一共添加20个用户,即stu1、stu2、...... 、stu20
 #初始密码均设为123456
 a=1
 while [ $a -le 20 ]
 do
    useradd stu$a -M
    echo "123456"| passwd --stdin stu$a &>/dev/dull
    let a++
    #一定要有变量迭代的过程
 done
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


小贴士:

将这些测试用户批量删除可以写脚本,也可以使用

echo stu{1..20} |xargs -n 1 userdel 命令。

示例2:猜商品价格游戏

要求:

  1. 猜商品价格游戏
  2. 通过变量RANDOM获得随机数
  3. 提示用户猜测并记录次数,猜中后退出循环

创建脚本:

[root@yuji ~]# vim while02.sh         //创建脚本
 #!/bin/bash
 # 猜商品价格游戏
 # 通过变量RANDOM获得随机数
 # 提示用户猜测并记录次数,猜中后退出循环
 #-----------------------------------------
 #商品价格
 price=$[RANDOM%100+1]
 #猜的次数
 a=0
 #死循环,一直为真。需要人为设置退出。
 while true
 do
    read -p "请猜测商品价格(1-100):" num
    let a++
    if [ $num -eq $price ]
    then
         echo "恭喜你猜对了"
         echo "你一共猜了 $a 次"
         exit
         #猜对价格后,退出脚本进程
     elif [ $num -lt $price ]
     then
          echo "太低了"
     else [ $num -gt $price ]
           echo "太高了"
      fi
 done
 [root@yuji sh]# bash while02.sh       //运行脚本
 请猜测商品价格(1-100):50
 太高了
 请猜测商品价格(1-100):30
 太低了
 请猜测商品价格(1-100):40
 太低了
 请猜测商品价格(1-100):45
 太低了
 请猜测商品价格(1-100):47
 太低了
 请猜测商品价格(1-100):48
 太低了
 请猜测商品价格(1-100):49
 恭喜你猜对了
 你一共猜了 7 次
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


示例3:while和read结合 读取文件内容

read用法简介:

  1. read 每次只能读取一行内容,如果read识别到了换行符,就结束这一次的读取。
  2. linux中的换行符是:换行+回车( 即“\n” )

方法一:

把test文件重定向输入给while,之后read逐行读取。

#!/bin/bash
 #把test文件重定向输入给while,之后read逐行读取
 while read line
 do
    echo $line
 done < test.txt
复制代码


方法二:

把文件内容通过管道符传给while,之后read逐行读取。

#!/bin/bash
 #把文件内容通过管道符传给while,之后read逐行读取
 cat test.txt | while read line
 do
      echo $line
 done 
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2 until循环语句

用法:

  • 重复测试某个条件,只要条件不成立则反复执行。

格式:

until 条件测试操作
 do
    命令序列
 done
复制代码


网络异常,图片无法展示
|


2.1 until语句的作用演示

打印1到10:

[root@yuji sh]# a=1
 [root@yuji sh]# until [ $a -gt 10 ]
 > do
 > echo $a
 > let a++
 > done
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 [root@yuji sh]# echo $a
 11
复制代码


网络异常,图片无法展示
|


2.2 until 循环应用示例

示例1:计算1到10的和

创建脚本:

[root@yuji sh]# vim until01.sh        //写脚本
 #!/bin/bash
 # 计算1到10的和
 sum=0
 i=1
 # 条件不成立才执行命令序列
 until [ $i -gt 10 ]
 do
    let sum=$[sum+i]
    let i++
 done
 echo "1到10的求和结果是:$sum"
 [root@yuji sh]# bash until01.sh        //运行脚本
 1到10的求和结果是:55
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|




示例2:为指定用户发送在线消息

要求:

  1. 为指定用户发送在线消息;
  2. 若用户不在线(未登录系统),则每10分钟试一次,直至用户登录系统后再发送消息;
  3. 用户名与消息通过位置参数传递给脚本。

创建脚本:

[root@yuji sh]# vim until02.sh
 #!/bin/bash
 #为指定用户发送在线消息
 #若用户不在线(未登录系统),则每10分钟试一次,直至用户
 登录系统后再发送消息
 #用户名与消息通过位置参数传递给脚本
 # 只要用户在线不成立(即用户不在线).就执行命令序列
 until who |grep "$1" &> /dev/null
 do
    echo "$1 不在线"
    sleep 600
 done
 echo $2 | write $1
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


相关文章
|
5月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
4月前
|
Shell
Shell编程(下)
Shell编程(下)
122 1
|
4月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
63 1
|
4月前
|
Shell Linux 开发工具
|
4月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
99 12
|
5月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
Shell Linux
Linux操作系统实验七 Shell编程之循环程序编程(下)
Linux操作系统实验七 Shell编程之循环程序编程(下)
193 0
|
Shell Linux
Linux操作系统实验七 Shell编程之循环程序编程(中)
Linux操作系统实验七 Shell编程之循环程序编程(中)
154 0
|
Shell C语言
shell编程之for、while、until循环语句
shell编程之for、while、until循环语句
112 1