shell教程之循环语句for,while,until用法

shell教程之循环语句for,while,until用法

循环语句:

Bash Shell中主要提供了三种循环方式:for、while和until。

一、for循环
for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。

其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

for的语法结构如下:

for 变量 in 串行
do
   执行命令
done

说明:

行1,讲串行中的字段迭代放入变量中

行2-4,接着将重复执行do和done之间的命令区域,直到串行中每一个字段军处理过为止。

流程图
在这里插入图片描述
例1:

用for循环在家目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录

#!/bin/bash
for a in {
   1..10}
do
        mkdir /datas/aaa$a
        cd /datas/aaa$a
        for b in {
   1..10}
        do
                mkdir bbb$b
        done
done
#!/bin/bash
for k in $( seq 1 10 )
do
   mkdir /home/kuangl/aaa${k}
   cd /home/kuangl/aaa${k}
   for l in $( seq 1 10 )
   do
   mkdir bbb${l}
   cd /home/kuangl/aaa${k}
   done
   cd ..
done

说明:

行2,seq 用于产生从某个数到另外一个数之间的所有整数。

行4,在家目录下创建文件夹。

行6,在使用一个for循环创建文件夹

例2

列出var目录下各子目录占用磁盘空间的大小。

#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR)
do
  [ -d $k ] && du -sh $k
done

说明:

行4,对/var目录中每一个文件,进行for循环处理。

行6,如果/var下的文件是目录,则使用du -sh计算该目录占用磁盘空间的大小。

二、while循环
while循环的语法:

1 while 条件测试
2 do
3   执行命令
4 done

说明:

行1,首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则

不进入循环,介绍while 命令

行3,执行命令区域,这些命令中,应该要有改变条件测试的命令,这样,才有机会在

有限步骤后结束执行while循环(除非想要执行无穷循环)。

行4,回到行1,执行while命令

流程图:
在这里插入图片描述
例1

while循环,经典的用法是搭配转向输入,读取文件的内容,做法如下:

 #!/bin/bash
while read a
do
        echo $a
done < /datas/6files
1 #!/bin/bash
2 while read kuangl
3 do
4   echo ${kuangl}
5 done < /home/kuangl/scripts/testfile

说明:

行2,使用read有标准输入读取数据,放入变量kuangl中,如果读到的数据非空,就进入循环。

行4,把改行数据显示出来

行5,将/home/kuangl/scripts/testfile的内容转向输入将给read读取。

例2

#!/bin/bash
declare -i i=1
declare -i sum=0
while ((i<=10))
do
  let sum+=i
  let i++
done
echo $sum
#!/bin/bash
declare -i i=1
declare -i sum=0
while ((i<=10))
do
  let sum+=i
  let ++i
done
echo $sum

说明:

行2-3,声明i和sum为整数型

行4,如果条件测试:只要i值小于或者等于10,就执行循环。

行6,sum+=i和sum=sum+i是一样的,sum累加上i。

行7,i的值递增1,此行是改变条件测试的命令,一旦i大于10,可终止循环。

行8,遇到done,回到行6去执行条件测试

行9,显示sum的值为55

例3 while99乘法表

#!/bin/bash
a=1
b=1
while ((a <=9))
do
        while ((b<=a))
        do
                let "c=a*b"   #声明变量c
                echo -n  "$a*$b=$c "
                let b++
        done
        let a++
        let b=1  #因为每个乘法表都是1开始乘,所以b要重置
        echo "" #显示到屏幕换行
done

说明:

行8,声明变量c

行9,echo输出显示的格式,-n不换行输出

行13,let b=1因为每个乘法表都是1开始乘,所以b要重置

三、until循环
while循环的条件测试是测真值,until循环则是测假值。

until循环的语法:

1 until 条件测试
2 do
3  执行命令
4 done

说明:
行1,如果条件测试结果为假(传回值不为0),就进入循环。

行3,执行命令区域。这些命令中,应该有改变条件测试的命令,这样子,才有机会在有限步骤后结束执行until 循环(除非你想要执行无穷循环)。

行4,回到行1,执行until命令。

流程图:
在这里插入图片描述
例1

1 #!/bin/bash
2 declare -i i=10
3 declare -i sum=0
4 until ((i>10))
5 do
6   let sum+=i
7   let ++i
8 done
9 echo $sum

说明:
行2-3,声明i和sum为整数型

行4,如果条件测试:只要i值未超过10,就进入循环。

行6,sum+=i和sum=sum+i是一样的,sum累加上i。

行7,i的值递增1,此行是改变条件测试的命令,一旦i大于10,可终止循环。

行8,遇到done,回到行6去执行条件测试

行9,显示sum的值为10

例2 until99乘法表

#!/bin/bash
a=1
b=1
until ((a>9)) #until 和while相反,条件假的执行,条件真就done结束
do
        until ((b>a))
        do
                let "c=a*b"
                echo -n "$a*$b=$c "
                let b++
        done
        let a++
        let b=1
        echo ""
done

说明:

行4,如果条件测试:只要a值未超过9,就进入循环,一旦超过9就不执行,until和while条件相反,条件真就done结束

行6,b>a,一旦b大于a就不执行了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101817.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 机器学习 之 Haar特征

    机器学习 之 Haar特征Haar特征Haar特征原理综述Haar特征是一种反映图像的灰度变化的,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用黑色矩形像素和减去白色矩形像素和来表示这个模版的特征值。例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一

  • firefox如何安装flash(ubuntu火狐浏览器没网)

    一.前言Ubuntu系统因为开源,免费等特性,很受欢迎,在过程XP退役后,许多不愿升级坑人win8的童鞋开始尝试这些免费的系统。Firefox是Ubuntu系统自带的浏览,在Windows上就广受欢迎,唯一一点不好就是作为系统自带的浏览器,竟然没有Flash插件,如图1;而对于刚接触Ubuntu系统的人来说,习惯了Windows的安装软件方式,在Ubuntu上装插件、软件有点不习惯。下面给大家…

  • 在线html代码生成器,支持网页快速排版 CSS代码一键生成的在线设计工具

    在线html代码生成器,支持网页快速排版 CSS代码一键生成的在线设计工具用户体验现在作为很多工作的重中之重,设计师们更要把用户体验放在第一位,如果你曾经尝试过想把你的板面调整到最适合阅读的状态,就会知道多么令人抓狂。但是懒人总是会创造出新科技,国外开发者为我们带来了今天要讲的协助设计网页排版及字型等相关属性的便利工具。typeanything前段时间登上国外媒体网站后深获好评,这是一项非常方便的在线工具,功能设计很简单,主要提供一段文章模板(里头包含h1、h2…

  • 阿里云ECS部署ES

    阿里云ECS部署ES

    2021年11月28日
  • win10企业版激活简便方法

    win10企业版激活简便方法win10企业版激活简便方法因为之前加固态,就拿去升级,顺便重装了一下系统,谁知道被坑了,给我看的时候显示的是激活,结果是假激活,有很多win10激活都是假激活,只有6个月的使用权限,因为如今装了很多编程软件,实在不想再重新装系统,于是找到了一种比较简单的方法,推荐给有相同境遇的朋友吧,非永久激活,也是6个月而已。1.首先启动超级管理器命令行右键左下角window图标 2、复制命令:s…

  • 一致性哈希算法详解

    一致性哈希算法详解1、使用哈希算法有什么问题?假设有一个由A、B、C三个节点组成的KV服务,每个节点存放不同的KV数据。通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,经过计算寻址到了编号为1的服务器节点A但如果服务器数量发生变化,基于新的服务器数量来执行哈希算法的时候,就会出现路由寻址失败的情况,Proxy无法找到之前寻址到的那个服务器节点假如3个节点不能满足业务需求了,这时增加了一个节点,节点的数量从3变化为4,那么之前的hash(key

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号