循环语句:

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 {..}
do
mkdir /datas/aaa$a
cd /datas/aaa$a
for b in {..}
do
mkdir bbb$b
done
done
 #!/bin/bash
for k in $( seq )
do
mkdir /home/kuangl/aaa${k}
cd /home/kuangl/aaa${k}
for l in $( seq )
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循环的语法:

 while 条件测试
do
执行命令
done

说明:

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

不进入循环,介绍while 命令

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

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

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

流程图:

例1

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

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

说明:

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

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

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

例2

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

说明:

行8,声明变量c

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

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

三、until循环

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

until循环的语法:

 until 条件测试
do
执行命令
done

说明:

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

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

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

流程图:

例1

 #!/bin/bash
declare -i i=
declare -i sum=
until ((i>))
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的值为10

例2    until99乘法表

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

说明:

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

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

Shell脚本中循环语句for,while,until用法的更多相关文章

  1. shell脚本之循环语句与函数

    shell脚本之循环语句与函数 echo的用法: echo -n #表示不换行输出 echo -e #输出转义字符,将转义后的内容输出到屏幕上 转义字符: \n :换行,被输出的字符从"\n ...

  2. Shell编程之循环语句与echo的用法

    Shell编程之循环语句与echo的用法 目录 Shell编程之循环语句与echo的用法 一.echo用法 1. echo常用选项 2. 常用的转义字符 3. 特殊符号%.#的用法 二.循环语句 1. ...

  3. 自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)

    1. 循环前先了解echo的使用 1.1 echo -n 表示不换行输出 1.2 echo -e 输出转义字符,将转义后的内容输出到屏幕上 常见的转义字符有: 1.2.1 \b 相当于退格键 转义后相 ...

  4. shell脚本之循环语句 for-while-until

    目录: 一.for循环语句 二.while循环语句 三.unti循环语句   一.for循环语句 读取不同的变量值,用来逐个执行同一组命令 举例 批量添加用户◆ 用户名存放在users.txt文件中, ...

  5. shell脚本中select循环语句用法

    shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...

  6. 在shell脚本中进行条件控制以及使用循环

    转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...

  7. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  8. shell脚本、if语句、for循环语句

    shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...

  9. shell脚本中的case条件语句介绍和使用案例

    #前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...

随机推荐

  1. java 对象占用内存

    String 方法用于文本分析及大量字符串处理时会对内存性能造成一些影响.可能导致内存占用太大甚至OOM. 一.先介绍一下String对象的内存占用 一般而言,Java 对象在虚拟机的结构如下:•对象 ...

  2. 掌握MySQL数据库这些优化技巧,事半功倍!

    一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇文章主要谈谈MySQL数据库在发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大 ...

  3. pycharm 中切换虚拟环境

    在pycharm上创建虚拟环境,网上的资料非常多. 如果pycharm上有多个项目,如何切换每个项目的虚拟环境? cmd 命令进入虚拟环境所在的文件夹(Pycharm在每创建一个新项目时就会创建一个虚 ...

  4. go系列(3)- go框架beego以及redis的使用

    这篇讲讲如何在beego框架使用redis. golang中比较好用的第三方开源redisclient有: go-redis 源码地址:https://github.com/go-redis/redi ...

  5. 洛谷1280(dp)

    题目性质:1.当前节点空闲则必须做任务,而不是可选可不选:2.然而前面的如果能覆盖当前节点,就可以不选. 解决方法:倒着扫可以很好地解决这两个问题.dp[i]为时刻i可得的最大空闲时间.如果此刻没有任 ...

  6. POJ-3275:Ranking the Cows(Floyd、bitset)

    Ranking the Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3301   Accepted: 1511 ...

  7. hdu6318( 2018 Multi-University Training Contest 2)

    bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6318 求逆序数的对数 #include<iostream> #include ...

  8. 51nod 2133 排队接水

    Bryce1010模板 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=2133 #include <bits/std ...

  9. [HDU1595] find the longest of the shortest

    题目链接: 点我 题意: 给定一个\(n\)个点,\(m\)条边的带权无向图,起点为\(1\),终点为\(n\),现在可以删去其中的一条边,求一种删边方案使得剩下图的最短路值最大,输出这个最短路的长度 ...

  10. keil_rtx特点

    Keil RTX是一个专为ARM及Cortex M系列处理器开发的无版税的确定的实时操作系统.它允许工程师建立多任务同步并行的程序软件,同时也能帮助使程序代码更加结构化和便于维护.   产品亮点 所有 ...