【Shell 脚本速成】10、Shell 流程控制 while 循环

news2025/1/13 15:59:37

目录

一、while 介绍

1.1 while 语法

二、while 与 shell 运算

2.1 比较运算

2.2 逻辑运算

2.3 文件类型判断

2.4 特殊条件

三、while 与循环控制语句

3.1 sleep 语句

3.2 break

3.3 continue

四、while 嵌套其他语句

4.1 while 嵌套 if

4.2 while 嵌套 for 

4.3 while 嵌套 while


 

        while 在 shell 中也是负责循环的语句,和for一样。因为功能一样,很多人在学习和工作中的脚本遇到循环到底该使用for还是while呢?很多人不知道,就造就了有人一遇到循环就是for或者一味的while。

        我个人认为可以按照我说的这个思想来使用,既知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。所以这样的循环我就建议大家用while了。

一、while 介绍

特点:条件为真就进入循环,条件为假就退出循环,一般应用在未知循环次数的环境。

1.1 while 语法

while [ 表达式 ]
	do
		command...
	done
	
# 如:
while  [ 1 -eq 1 ]    或者 (( 1 > 2 ))
  do
     command
     command
     ...
 done

案例
使用for循环和while循环分别循环打印数组1-5

案例代码

#!/bin/bash

i=1
while [ $i -le 5 ]
do
        echo $i
        let i++
        #i=$((i+1))
done

[root@shell ~]# vim while-1.sh
[root@shell ~]# sh while-1.sh
1
2
3
4
5

备注: 知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。

二、while 与 shell 运算

2.1 比较运算

案例:
循环交互输入一个小写字母,按 Q 退出循环

[root@shell ~]# vim while-2.sh
#!/bin/bash

read -p "请输入一个字符[按'Q'退出]: " choose

while [ $choose != 'Q']
do
        echo "你输入的字符是:$choose"
        read -p "请输入一个字符[按'Q'退出]: " choose
done

[root@shell ~]# vim while-2.sh
[root@shell ~]# sh while-2.sh
请输入一个字符[按'Q'退出]: s
你输入的字符是:s
请输入一个字符[按'Q'退出]: 2
你输入的字符是:2
请输入一个字符[按'Q'退出]: e
你输入的字符是:e
请输入一个字符[按'Q'退出]: Q

2.2 逻辑运算

案例:
使用循环语句帮助丈母娘批量选择女婿

[root@shell ~]# vim while-3.sh
#!/bin/bash

#丈母娘选女婿。进行与或非模拟

# 第一个应征者回答
read -p "你有多少钱: " money
read -p "你有多少车: " car
read -p "你家房子有几套: " house

# 应征者不满住条件开始下一次循环
#while [ $money -lt 10000 ]&&[ $car -lt 1 ]&&[ $house -lt 2 ]
while [ $money -lt 10000 ]||[ $car -lt 1 ]||[ $house -lt 2 ]
  do
     echo "有请下一个"
     read -p "你有多少钱: " money
     read -p "你有多少车: " car
     read -p "你家房子有几套: " house
done

# 应征者满足条件
echo  "乖女婿,你怎么才来啊!女儿给你了"

效果展示

 

2.3 文件类型判断

案例:
使用循环判断 /tmp/xxx 目录下的文件,如果不是文件类型的打印字符串"haha"

[root@shell ~]# vim while-4.sh
#!/bin/bash
while [ ! -f /tmp/xxx ]
 do
   echo “目录”
   sleep 1
done

[root@shell ~]# sh while-4.sh
“haha”
“haha”
“haha”
“haha”
^C

2.4 特殊条件

while 语句中可以使用特殊条件来进行循环

  • 符号 ":"  条件代表真,适用于无限循环
  • 字符串 “true” 条件代表真,适用于无限循环
  • 字符串 "false" 条件代表假
[root@shell ~]# vim while-4.sh
#!/bin/bash

#while [ ! -f /tmp/test.txt ]
while true 
do
   echo “haha”
   sleep 1
done

[root@shell ~]# sh while-4.sh
“haha”
“haha”
“haha”
“haha”
^C

三、while 与循环控制语句

3.1 sleep 语句

#!/bin/bash
#Description: 倒计时游戏

#1. 定义初始值
time=9

#2. 循环输出,1秒一次
while [ $time -ge 0 ]
  do
     echo -n -e  "\b$time"
     let time--
     # 控制循环 1秒一次	
     sleep 1
done

# 回车
echo

3.2 break

#!/bin/bash
#Description: 输出数字1-9,当输出5时停止

# 定义初始值
num=1

while [ $num -lt 10 ]
  do
     echo $num

     # 判断当前num的值,如果等于5就跳出循环
     if [ $num -eq 5 ]
        then
		break
     fi

     # 自动累加
     let num++
done

3.3 continue

#!/bin/bash
#Description: 输出数字1-9,当等于5时跳过本次循环,输出1、2、3、4、6、7、8、9

# 定义初始值
num=0

while [ $num -lt 9 ]
  do
     # 自动累加
     let num++
     
     # 判断当前num的值,如果等于5就跳过本次循环
     if [ $num -eq 5 ]
        then
		continue
     fi

     # 输出num的值
     echo $num
done

四、while 嵌套其他语句

4.1 while 嵌套 if

循环中需要判断的时候:

#!/bin/bash
#Description: 输出数字1-9,当输出5时停止

# 定义初始值
num=1

while [ $num -lt 10 ]
  do
     echo $num

     # 判断当前num的值,如果等于5就跳出循环
     if [ $num -eq 5 ]
        then
		break
     fi

     # 自动累加
     let num++
done

4.2 while 嵌套 for 

多次循环的场景,内循环需要依赖外循环:

#!/bin/bash
#Description: 99乘法表

A=1
while [ $A -lt 10 ]
  do
    for ((B=1;B<=$A;B++))
       do
	  echo -n -e "$B*$A=$((A*B)) \t"
   done
   echo 
   let A++
done

4.3 while 嵌套 while

#!/bin/bash
#Description: 99乘法表

# 定义A
A=1
while [ $A -lt 10 ]
  do
      # 定义B
      B=1
      while [ $B -le $A ]
        do
          echo -n -e "$B*$A=$((A*B)) \t"
          let B++
      done

   echo 
   let A++
done

 上一篇文章:【Shell 脚本速成】09、Shell 循环控制语句 for_Stars.Sky的博客-CSDN博客

参考文档:流程控制-while循环-组团学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XSKY星晨天合-后台开发岗

一面 TCP与UDP区别UDP的优点&#xff08;实时性好&#xff0c;占用资源低&#xff0c;无需三次握手较少被黑客利用的机会&#xff09;UDP增加哪些功能可以实现更可靠、更稳定、且保证有序&#xff08;超时重传、滑动窗口流量控制、序号/确认序号&#xff0c;面试官提到了kcp&a…

使用HTML制作静态宠物网站——蓝色版爱宠之家(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【ES6】阮一峰ES6学习(六) Proxy(一)

Proxy1. 前言2. 使用1. get()方法2. set()方法未完待续1. 前言 es6中全新设计了一个叫Proxy的类型&#xff0c;Proxy这个词的原意是代理&#xff0c;用在这里表示由它来”代理“某些操作&#xff0c;可以译为”代理器“&#xff0c;Proxy就是专门为对象设置访问代理器的&#…

【1775. 通过最少操作次数使数组的和相等】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间&#xff08;包含 1 和 6&#xff09;。 每次操作中&#xff0c;你可以选择 任意 数组中的任意一个整数&…

1978-2021年全国GDP平减指数计算模板

全国GDP平减指数计算公式可以给定基期&#xff0c;自动计算平减指数&#xff01; 1、时间区间&#xff1a;1978-2021年 2、计算说明&#xff1a;GDP平减指数名义GDP/实际GDP 实际GDP又称不变价GDP&#xff0c;名义GDP就是公布的数字&#xff0c;它没有考虑通货膨胀因素。 给…

【Unity】UnityWebRequest学习——Unity中的HTTP网络通信

目录UnityWebRequest 简介HTTP网络通信流程HTTP 三点注意事项HTTP请求HTTP响应例子使用Unity内置的UnityWebRequest类进行HTTP请求&#xff08;GET&#xff09;使用BestHTTP插件进行HTTP请求&#xff08;GET&#xff09;使用Unity内置的UnityWebRequest类进行HTTP请求&#xff…

主成分分析/因子分析与线性映射

数据降维&#xff0c;包括主成分分析PCA和因子分析FA&#xff0c;都离不开特征值和特征向量。今天先不细说特征值和特征向量&#xff0c;先说一说理解数据降维的一个关键概念&#xff0c;线性映射。 看到csdn里很多文章讲特征值与特征向量时&#xff0c;都会先讲讲线性映射&am…

绿色荧光试剂Fluorescein Tyramide,荧光素酪胺,210236-90-1

CAS编号为210236-90-1的化学试剂其英文名为Fluorescein Tyramide&#xff0c;其中文名称为荧光素酪胺&#xff0c;它是一种绿色荧光染料。 该荧光试剂的分子量是495.49 &#xff0c;分子式为C29H21NO7。该试剂质量控制为95%&#xff0c;试剂的储存条件为&#xff1a; -20℃长期…

维二糖-聚乙二醇-酰基,Cellobiose-PEG-Hydrazide,酰基-PEG-纤维二糖

维二糖-聚乙二醇-酰基&#xff0c;Cellobiose-PEG-Hydrazide&#xff0c;酰基-PEG-纤维二糖 中文名称&#xff1a;纤维二糖-酰基 英文名称&#xff1a;Cellobiose-Hydrazide 别称&#xff1a;生物素修饰纤维二糖&#xff0c;生物素-纤维二糖 酰基(acyl group)&#xff0c;是…

[附源码]计算机毕业设计框架的资产管理系统设计与实现Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux学习笔记——初识Linux

01、初识Linux 1.1、操作系统概述 1、学习目标&#xff1a; 了解操作系统的作用了解常见的操作系统 2、硬件和软件 我们所熟知的计算机是由硬件和软件组成的。 硬件&#xff1a;计算机系统中由电子、机械和光电元件等组成的各种物理装置的总称。&#xff08;看的见、摸得…

基于jsp+mysql+SSM动物园门票预订网站系统-计算机毕业设计

项目介绍 现代化动物园管理系统日趋复杂&#xff0c;传统的以手工方式为主的管理操作模式&#xff0c;局限性日趋突显&#xff1a;宣传手段单一&#xff0c;管理效率低,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统使用mysql&#xff0c;独立运行,…

保姆级 | Python设置py2和py3共存

0x00 前言 在使用一些 python 脚本时&#xff0c;有些库只能用 python2.X 版本进行使用&#xff0c;而有些脚本却需要 python3.X 版本进行。如果不能在一个主机中设置 py2 和 py3 共存&#xff0c;那么会对自身的工作造成极大的不便。 0x01 环境说明 python-2.7.18python-3.11…

ATTCK-T1592-001-收集受害者主机信息-硬件

0X01 基础信息 具体信息详情ATT&CK编号T1592-001所属战术阶段侦察操作系统windows10 企业版 LTSC创建时间2022年11月7日监测平台火绒安全、火绒剑、sysmon 0X02技术原理 在入侵受害者之前&#xff0c;攻击者可能会收集有关受害者主机硬件的信息&#xff0c;这些信息可以在…

作为测试开发岗的面试官,我都是怎么选人的?

最近一段时间面试了不少人&#xff0c;主要是一些测试开发岗&#xff0c;中高级的初级的也都有&#xff1b;也有一些偏业务测试岗的候选人。总结出了一些方法论&#xff0c;或者说更多的是个人作为面试官所遵守的一套面试准则。 1.什么是面试&#xff1f; 面试不仅仅是你问我…

什么是数字签名?(数字签名与信息摘要又有什么关系?)

在上一篇博文【什么是信息摘要】结尾我给出了一个结论&#xff1a;“看来单纯的信息摘要技术还不能保证信息的完整性&#xff0c;即不能确定信息是否被篡改”&#xff0c;由此并引出了“数字签名”的概念。上一篇博文的地址在下面&#xff0c;没看的小伙伴可以看一下&#xff0…

CSDN第13次竞赛题解与总结

前言 2022/12/7 CSDN第13次竞赛「人民邮电出版社 & CSDN」联合主办。 本次奖品为《计算之魂》&#xff1a; 系统地讲解了计算机科学的精髓&#xff0c;不仅有助于了解计算机科学&#xff0c;更有助于了解 IT 产业的技术特点、培养一些特殊的思维方式、掌握信息时代特殊的…

开源web自定义表单有哪几个特点?

目前&#xff0c;市场正在蓬勃发展中&#xff0c;作为企业&#xff0c;采用传统表单的弊端也逐渐显现出来&#xff0c;面临比较大的问题就是办公效率得不到提升。在各行各业正积极筹备朝着数字化方向转型的背景下&#xff0c;采用开源web自定义表单可以弥补传统表单弊端&#x…

windows系统“彻底”隐藏任务栏

项目概况及目标 因某项目所需&#xff0c;要实现win10系统上任务栏的“彻底”隐藏。此处任务栏隐藏要求无键盘操作无法唤出。 方案一、任务栏设置 我们都知道&#xff0c;在任务栏设置中可以通过更改自动隐藏任务栏选项来实现任务栏的隐藏显示。 但是该方案的隐藏会在鼠标经…

论文速读系列一:VoteNet、CBGS、BirdNet、StarNet、STD

如有错误&#xff0c;恳请指出。 参考网上资料&#xff0c;对一些经典论文进行快速思路整理 文章目录1. VoteNet2. CBGS3. BirdNet4. StarNet5. STD参考网上资料&#xff0c;对一些经典论文进行快速思路整理 1. VoteNet paper&#xff1a;《Deep Hough Voting for 3D Object …