Linux系统Shell脚本第三章:for、while循环及脚本实操

这篇具有很好参考价值的文章主要介绍了Linux系统Shell脚本第三章:for、while循环及脚本实操。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、for循环

1、基本格式

2、类C语言格式

二、while循环

1、基本格式

2、死循环语句

三、跳出循环

1、continue跳出循环

2、break跳出循环

四、常用循环脚本实例

1、循环打印9*9乘法表

2、循环ping测试某个网段网络连通性

3、while死循环实现猜数字游戏


一、for循环

用于已知循环次数的场景

1、基本格式

for   变量名称(注意是名称不是变量$等)    [  in   名称范围  ] (可以不写)

do   

执行内容    若满足循环则做什么动作

done    for循环结束标志

举例:
vim  a.sh               #创建脚本a.sh
脚本内容:
#!/bin/bash
for  i   in  {1..5}    #for循环10次,第一次i=1,第二次i=2以此类推直到i=5
do
echo "$i"               #循环动作,每次输出$i 
done                    #for语句结束标志
bash  a.sh              #调用shell执行脚本a.sh
执行结果:
1
2
3
4
5

linux shell while,linux,bash,运维

2、类C语言格式

for (( 表达式1 ;表达式2;表达式3   ))

do

执行内容    若满足循环则做什么动作

done           for循环结束标志

表达式1:定义变量并赋值

表达式2:决定是否循环

表达式3:决定循环变量如何改变,决定循环什么时候结束

举例:
vim a.sh                
脚本内容:
#!/bin/bash
for(( i=0;i<=5;i++ ))     #定义for循环i变量初始值为0,循环条件i小于等于5,每循环一次i自加1
do
echo "$i"                 #for循环每循环一次执行一次输出$i
done                      #for语句结束标志
bash a.sh                 #调用shell执行脚本
输出结果:
0
1
2
3
4
5

linux shell while,linux,bash,运维

二、while循环

用于不知道循环次数,需要主动结束循环或达到条件结束循环。

1、基本格式

while   [ 判断条件] 使用while循环满足条件执行do,不满足不执行 

do       

执行动作   while循环执行动作

done         while循环结束标志

举例:
vim  b.sh               #创建脚本b.sh
脚本内容:
#!/bin/bash
i=0
while [ $i -le 5  ]     #变量i小于等于5时执行while循环
do
echo "$i"               #循环执行内容,每循环一次打印$i
let i++                 #每循环一次计算一次i++即i自己+1
done                    #while语句结束标志 
bash  b.sh              #调用bash执行b.sh脚本
执行结果:
0
1
2
3
4
5

linux shell while,linux,bash,运维

2、死循环语句

①while  [1  -eq  1]   判断条件写一个永久为真的条件 

    do       一直执行do内的命令

    done

②while  true        直接写判断条件为真

    do       一直执行do内的命令

    done

③while :         判断条件为冒号也表示死循环

    do       一直执行do内的命令

    done

三、跳出循环

1、continue跳出循环

①表示满足continue条件时跳出循环,但是不影响后续循环执行

举例:
vim a.sh         #创建脚本a.sh
脚本内容:
#!/bin/bash
for i in {1..5}  #for循环5次从i=1开始到i=5    
do
if [ $i -eq 3 ]  #if判断语句,若$1等于3则执行then的内容
then 
continue         #当$i=3时跳出循环但不影响后面循环  
fi               #结束if语句
echo "$i"        #没执行一次for循环输出一次$i
done             #for循环结束语句
bash a.sh        #调用shell执行脚本
输出结果
1
2
4
5

linux shell while,linux,bash,运维

2、break跳出循环

在某个循环中遇到break直接结束此次循环,但是不影响外边嵌套的循环。

break  [数字] 结束数字中的几次循环,若为2则结束自己所在循环和外边嵌套的一层循环,若为3则结束自己所在循环和外边嵌套的2层循环

举例:
vim   a.sh     #创建a.sh脚本
脚本内容:
#!/bin/bash
for j in {1..3}      #第一层for循环,j=1,2,3各执行一次do的内容
do                   #第一层for循环的执行内容
    for i in {1..5}  #第二层for循环,i=1,2,3,4,5各执行一次do的内容
    do               #第二层for循环的执行内容  
        if [ $i -eq 3 ]  #第二层for循环中添加的if判断语句,当$i=3是执行then内容
        then                
        break            #第二层for循环判断语句执行命令,break结束循环
        fi               #if语句结束
    echo "$i"            #第二层for循环语句执行每循环一次输出$i
    done                 #第二层for循环语句结束标志                
done                     #第一层for循环语句结束标志
bash a.sh                #调用bash执行a.sh脚本
执行结果:第二层执行在$i=3是结束了循环,所以只能输出1和2,第一层for循环是循环3次,所以输出了3次。
1
2
1
2
1
2

linux shell while,linux,bash,运维

四、常用循环脚本实例

1、循环打印9*9乘法表

思路:

①第一步for循环打印一行9个*号

②第二步再添加一个for循环打印一个9行9列的*号正方形

②第三步将*号正方形斜砍一般形成9*9乘法表的基本格式

③第四步将*号9*9乘法表格式用乘法算式替换

9*9乘法表
第一步:
vim 99.sh              #创建99.sh脚本
脚本内容:
#!/bin/bash
for i in {1..9}        #for循环9次从i=1开始
do
echo -n "*"            #每循环一次打印一个*,echo  -n参数表示不换行
done                   #此for循环语句结束
bash  99.sh            #调用shell执行脚本
执行结果:
*********
第二步:
vim 99.sh              #编辑99.sh脚本
脚本内容:
#!/bin/bash
for  j  in  {1..9}     #添加打印列循环,循环9次从j=1开始  
do                     #j循环时做do中的内容    
    for i in {1..9}    #第一步for循环内容不变
    do
    echo -n "*"
    done
echo                   #列循环每循环一次打印一行空格进行换行
done                   #列循环for语句结束标志
bash  99.sh            #调用shell执行脚本
执行结果:
*********
*********
*********
*********
*********
*********
*********
*********
*********
第三步:
vim 99.sh              #编辑99.sh脚本
脚本内容:
#!/bin/bash
for  j  in  {1..9}     #列循环内容不变  
do                         
    for i in `seq $j`  #修改行循环i的取值范围为展开变量j,即当j=1时i取值只有1,所以循环一次。当 
                       j=2时,i取值为1和2,所以i=1和i=2各循环一次,循环2次。以此类推到j=9
    do
    echo -n "*"
    done
echo                   
done                   
bash  99.sh            #调用shell执行脚本
执行结果:
*
**
***
****
*****
******
*******
********
*********
第四步:
vim 99.sh              #编辑99.sh脚本
脚本内容:
#!/bin/bash
for  j  in  {1..9}     #列循环内容不变  
do
    for i in `seq $j`
    do
    echo -ne "$j*$i=$[ $j*$i ]\t"   #行输出内容修改为9*9算式和结果。$[ ]表示计算里面的正整数结 
                              果,echo -e参数表示调用转义符,\t表示制表符即循环时输出一个tab键
    done
echo                   
done                   
bash  99.sh            #调用shell执行脚本
输出结果:
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81

linux shell while,linux,bash,运维

2、循环ping测试某个网段网络连通性

需求:测试用户输入的某个32位网段是否可以ping通,且若可以ping通将此ip输出到文件host.txt中。

思路:

①第一步读取用户输入的32位网段。

②使用for循环生成用户输入网段的所有ip。

③使用ping命令在循环中测试用户输入网段内所有ip,注意指定ping包个数和超时结束时间,否则一直ping。

④将循环检查网络连通性放入后台执行。

vim ping.sh    #创建ping.sh脚本
脚本内容:
#!/bin/bash
read -p "请输入需要测试的网段,格式为(192.168.30.):" ip #读取用户输入内容为变量ip
for i in {1..254}               #for循环254次,从i=1开始
do
{                               #将{}内容当成一个整体
ping -c2 -w2 $ip$i &>/dev/null  #指定ping包为2个超时结束时间为2秒且将产生的内容全部放入null垃圾桶中,&符号表示错误输出也放入null垃圾桶中
    if [ $? -eq 0 ]  #if条件判断如果上一个循环执行的命令是正确的则$?返回0,若等于0执行then的内容
    then
    echo "$ip$i  is  online" #if条件成立执行打印
    echo $ip$i >> host.txt   #将if条件成立的ip追加到host.txt文件中
    else
    echo "$ip$i  is  offline" #if添加判断不成立执行打印
    fi
}&                            #将循环成立的内容放入后台执行
done
wait                          #执行结束不等待直接退出

linux shell while,linux,bash,运维

linux shell while,linux,bash,运维

3、while死循环实现猜数字游戏

需求:生成随机1-100的价格给用户猜测直到猜对结束游戏,并统计用户猜对猜了几次。

思路:

①第一步生成一个随机1-100数字

②第二步使用while循环写一个死循环直到用户猜对才结束循环

③在执行循环的过程中统计循环执行次数并输出

vim game.sh      #创建脚本game.sh
脚本内容:
#!/bin/bash
num=`echo $[ RANDOM%100+1 ]`  #$[RANDOM]是一个0-32767的随机数,%100+1除100取余+1表示生成0-100随机数
time=0           #定义猜对次数变量time初始值为0
while true       #生成while死循环
do               #循环动作为do内的内容
let time++       #每循环一次time变量自加1
read -p "请输入您猜测的数字,范围(1-100):" user #读取用户输入的内容为变量user
    if [ $user -eq $num ]    #条件判断分支1,如果用户输入等于随机生成执行then动作
    then 
    echo "您猜对了,您一共猜测了$time次"  #if分支1条件成立执行输出
    break                               #if分支1条件成立则结束本次循环
    elif [ $user -gt $num  ] #条件判断分支2,如果用户输入大于随机生成执行本次then动作
    then
    echo "您猜大了,请往小猜"  #条件判断分支2成立提示用户猜大了
    elif [ $user -lt $num ]  #条件判断分支3,如果用户输入小于随机生成执行本次then动作
    then 
    echo "您猜小了,请往大猜"  #条件判断分支3成立提示用户猜小了
    fi                       #if语句结束
done
bash  game.sh                #调用bash执行脚本
执行结果
请输入您猜测的数字范围(1-100):50
您猜小了,请往大猜
请输入您猜测的数字范围(1-100):60
您猜小了,请往大猜
请输入您猜测的数字范围(1-100):70
您猜大了,请往小猜
请输入您猜测的数字范围(1-100):65
您猜大了,请往小猜
请输入您猜测的数字范围(1-100):62
您猜小了,请往大猜
请输入您猜测的数字范围(1-100):63
恭喜您猜对了,您一共猜了6次


linux shell while,linux,bash,运维

4、数字累加脚本(1-100) 

需求:编写脚本实现计算从1加到100的值

思路:

①累加需要用到循环,已知循环次数时使用for循环

②也可以使用while循环达到累加条件时结束循环

vim sum.sh    #创建sum.sh脚本
脚本内容:
sum=0         #定义变量sum初始值为0
for i in {1..100} #for循环 i取值从1到100
do
sum=$[ i+sum ]    #每次循环内容计算变量i+sum的值赋值给sum
done              #for语句结束标志
echo "1-100累加值为:$sum"  #循环结束后输出内容
bash  sum.sh      #调用shell执行脚本
执行结果:
"1-100累加值为:5050"

linux shell while,linux,bash,运维

vim sum1.sh   #创建sum1.sh脚本
脚本内容
#!/bin/bash
sum=0         #定义sum变量初始值
i=0           #定义i变量初始值
while [ $i -le 100 ]  #while循环,条件为当$1小于等于100时执行
do
sum=$[ i+sum ]        #循环执行内容计算i+sum的值重新赋值给i
let i++               #每执行一次循环计算一次变量i自加1
done                  #while语句结束标志
echo  "1-100的累加值为:$sum"  #循环完成后输出
bash sum1.sh          #调用bash执行脚本
执行结果:
1-100的累加值为:5050

linux shell while,linux,bash,运维

 文章来源地址https://www.toymoban.com/news/detail-792163.html

 

 

 

 

到了这里,关于Linux系统Shell脚本第三章:for、while循环及脚本实操的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】Shell脚本之流程控制语句 if判断、for循环、while循环、case循环判断 + 实战详解[⭐建议收藏!!⭐]

    👨‍🎓 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入! 🐋 希望大家多多支持,我们一起进步!😄 🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏

    2024年02月13日
    浏览(49)
  • LINUX网络第三章:DNS解析

    首先,我们要知道DNS是什么,DNS(Domain Name System)是域名系统的英文系统,是一种组织成域层次结构和计算机和网络服务命名系统,用于TCP/IP网络。、 DNS实际上是域名解析协议,将域名转化为IP地址 在早期的域名解析的时候,是iana组织负责将域名和IP地址进行对应,并对其进

    2024年01月17日
    浏览(45)
  • Linux设备驱动——第三章字符驱动

    当对幸福的憧憬过于急切,那痛苦就在人的心灵深处升起。——加缪 本章的目的是编写一个完整的字符设备驱动。我们开发一个字符驱动是因为这一类适合大部分简单的硬件设备。字符驱动也比块驱动易于理解。本章的最终目的是编写一个模块化的字符驱动,但是我们不会在

    2024年02月08日
    浏览(83)
  • 【系统架构】第三章-信息系统基础知识

    软考-系统架构设计师知识点提炼-系统架构设计师教程(第2版) 信息系统的5个基本功能:输入、存储、处理、输出和控制 信息系统的发展: 诺兰模型:初始阶段、传播阶段、控制阶段、集成阶段、数据管理阶段、成熟阶段 信息系统的分类: 传统的信息系统分为:业务(数

    2024年02月11日
    浏览(58)
  • 第三章:Linux简介及面试常问问题

    目录 一、Linux发展史 1.Linux前身-Unix 2.Linux诞生 3.开源文化 4.Linux系统特点 5.Linux操作系统优点 6.Linux操作系统发行版 7.Linux内核命名规则 二、Linux系统的安装 三、linux系统分区简介及如何分区 1.自动分区 2.手动分区 3.linux下查看分区信息和剩余空间大小 五、Linux系统的文件目录结

    2024年02月16日
    浏览(41)
  • 操作系统-笔记-第三章-内存管理

    一、第一章——操作系统的概念 二、第二章——【进程】 二、第二章——【线程】​编辑 二、第二章——【进程调度】 二、第二章——【进程同步与互斥】 二、第二章——【锁】 三、第三章——内存管理 四、第四章——文件管理 五、第五章——输入输出管理 ​​​​​

    2024年02月11日
    浏览(70)
  • 计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

    答: ① 总线 是连接多个部件的信息传输线,是个部件共享的传输介质。 ② 总线传输 特点 :在某一时刻,只允许有一个部件向总线发送信息,而多个部件可以同时从总线上接受相同的信息。 ③ 为减轻总线上的负载,各种I/O设备要通过 I/O接口 接在总线上,而且还要通过 三态门 挂在

    2023年04月13日
    浏览(64)
  • 操作系统考试复习——第三章 预防死锁 避免死锁

    预防死锁: 就是破坏死锁产生的四个条件之一就行。 0.破坏互斥条件:由于互斥条件是非共享设备所必须的所以,不仅不能改变还需要保证。因此我们主要考虑剩下的三个条件。 1. 破坏 \\\"请求和保持\\\" 条件 请求和保持也就是系统已经请求了一个资源它现在占有这个资源但是它

    2024年02月03日
    浏览(44)
  • 【操作系统】24王道考研笔记——第三章 内存管理

    1.基本概念 2.覆盖与交换 覆盖技术: 交换技术: 总结: 3.连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 动态分区分配算法: 总结: 4.基本分页存储管理 定义: 页表: 地址转换的实现: 子问题: 逻辑地址结构: 总结: 5.基本地址变换机构 流程: 原理:

    2024年02月11日
    浏览(66)
  • 计算机组成原理---第三章存储系统 习题详解版

    知识扩展: 如果主存的容量无法满足 CPU 的需求,可以通过存储器扩展来解决,扩展的方式有两种: 主存的 位数 不够(相当于快递柜的尺寸太小,放不下大包裹),则可以通过位扩展的方式(快递柜扩容)实现; 主存的 字数 不够 (存储单元的数目不够, 相当于快递柜数

    2024年02月08日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包