应该是你见过最详细的shell编程循环语句解析了(for循环、while循环、until循环)(一)

简介: 应该是你见过最详细的shell编程循环语句解析了(for循环、while循环、until循环)(一)

目录



前言


一、循环语句


1.1 for循环


1.2 while循环


示例1:批量添加用户


示例2:猜价格游戏


示例3:查看文件内容


1.3 until循环


示例1:计算1~50的和


二、多线程


三、分隔符


举例:读取文件,但是文件中有空格


举例:将五个环境分行输出


四、双循环


五、退出循环


5.1 exit


5.2 break


5.3 continue


5.4 死循环


六、总结


前言



本篇博客整理归类shell循环语句的相关知识点,单层循环以及双层循环的逻辑到底是什么样的?


另外本人写这篇博客的途中发现的Xshell的正确使用方式,将不透明度调低以后,可以透过窗口看到我美丽的桌面壁纸,就像是给Xshell增加了一个背景图片一样,我真是i了!!!


image.png

92cb082157dc410689540b07a72a2e88.png


一、循环语句



1.1 for循环


for循环的知识点提前单独写了一篇博客,这里就不再赘述了,大家自行查阅


shell编程for循环语句原来如此


1.2 while循环


重复测试某个条件,主要条件成立则反复执行


相对于for,需要知道循环次数;我们只知道停止条件,不知道次数,就需要使用while,直到达到条件


while [条件表达式]
do
.....
done

image.png

image.png


示例1:批量添加用户


用户名称以stu开头,按数字顺序进行编号

一共添加20个用户,即stu1、stu2......

初始密码均为000000

#!/bin/bash
#批量添加用户
i=1
while [ $i -le 20 ]
do
        useradd stu$i
        echo "000000" |passwd --stdin stu$i &>/dev/null
        let i++
#一定要有变量迭代的过程
done

image.png

image.png

da6a0d696c674cbbb3993df6e8e8d280.png


示例2:猜价格游戏


通过变量RANDOM获得随机数

提示用户猜测并记录次数,猜中后退出循环

#!/bin/bash
#猜价格游戏
res=$[RANDOM % 100]
a=0
while [ $a -eq 0 ]
#永远为真
do
        read -p "请输入你猜的价格(0-99):" price
        if [ $price -eq $res ]
        then
                echo "恭喜你猜对了!"
                let b++
                let a++
#a++代表正确后退出循环
#b++用来统计猜的次数
        elif [ $price -lt $res ]
        then
                echo "猜低了,继续猜"
                let b++
        elif [ $price -gt $res ]
        then
                echo "猜高了,继续猜"
                let b++
        fi
done
echo "你一共猜了$b 次"
#也可以将b++放在read -p下面

image.png

image.png


示例3:查看文件内容


法一:


#!/bin/bash
#查看文件内容
while read line
#read结合后面的重定向,模拟用户输入
#line是变量名,名字不唯一
do
        echo $line
#打印这个变量
done < test.txt
#文件重定向给循环


法二:


#!/bin/bash
cat test.txt |while read line
#使用管道符将查看到的文件利用read导入给while循环
#read结合后面的重定向,模拟用户输入
#line是变量名,名字不唯一
do
        echo $line
#打印这个变量
done


1.3 until循环


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


基本上while能干的事情,until也能干


until [条件表达式]
do
.....
done

image.png

image.png


示例1:计算1~50的和


#!/bin/bash
#求50以内的和
a=0
sum=0
#给定初值
until [ $a -gt 50 ]
#大于50为假
do
        sum=$[sum + a]
        let a++
#得出值,并迭代
done
        echo "50以内的和: $sum "

image.png

image.png


二、多线程



for循环一般在正常执行的时候一个进程串行执行的取值列表的,如果脚本内容很多,效率低下,我们可以通过多线程并行处理提高效率


#!/bin/bash
#多线程
for ip in 192.168.109.{1..254}
do
        {
        ping -c 3 -i 0.5 -w 2 $ip &>/dev/null
        if [ $? -eq 0 ]
        then
                echo "$ip is online">>/opt/host_online.txt
        else
                echo "$ip is offline">>/opt/host_offline.txt
        fi
        }&
#增加&符号(前面将代码用括号括起来),代表将进程放到后台处理,后台命令之间不区分先后关系
done
wait
#wait的作用是等待上面所有后台进程都执行完毕后才会去执行后面的语句。
#如果不用wait,后面的语句不会等待后台进程,会造成需要有上下文依赖关系
#的程序执行错误
cat /opt/host_online.txt
cat /opt/host_offline.txt

image.png

目录
相关文章
|
消息中间件 JavaScript 前端开发
最细最有条理解析:事件循环(消息循环)是什么?为什么JS需要异步
度一教育的袁进老师谈到他的理解:单线程是异步产生的原因,事件循环是异步的实现方式。 本质是因为渲染进程因为计算机图形学的限制,只能是单线程。所以需要“异步”这个技术思想来解决页面阻塞的问题,而“事件循环”是实现“异步”这个技术思想的最主要的技术手段。 但事件循环并不是全部的技术手段,比如Promise,虽然受事件循环管理,但是如果没有事件循环,单一Promise依然能实现异步不是吗? 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您
|
Java 测试技术 数据安全/隐私保护
📖Java零基础-while循环语句的深度解析
【10月更文挑战第6天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
529 1
|
Shell UED Python
Shell 循环语句:重复任务的自动化利器
在Shell脚本中,循环语句如`while`和`for`是自动化任务的关键。`while`循环在条件满足时执行,例如计算1到100的和;`for-in`循环遍历列表,可用于迭代指定数值或命令输出,如求1到100的和。`select-in`循环提供交互式菜单,增强脚本用户体验。理解并运用这些循环能提升脚本效率和可读性。现在,动手试试吧!
226 2
|
机器学习/深度学习 Shell Perl
shell 脚本循环语句
shell 脚本循环语句
|
存储 Java 程序员
深入解析Java中的foreach循环语句
深入解析Java中的foreach循环语句
352 0
|
存储 Java
Java中的for循环语句深入解析
Java中的for循环语句深入解析
410 0
|
C语言
C语言中的条件控制循环:深入解析与实战应用
C语言中的条件控制循环:深入解析与实战应用
332 1
|
C语言
C语言条件控制循环的深入解析
C语言条件控制循环的深入解析
304 0
|
C语言
C语言计数控制循环的深入解析
C语言计数控制循环的深入解析
512 0
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
512 4

推荐镜像

更多
  • DNS
  • 下一篇
    开通oss服务