Shell脚本中的循环
循环语句:
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} domkdir /datas/aaa$acd /datas/aaa$afor b in {1..10}domkdir bbb$bdone done
1 #!/bin/bash2 for k in $( seq 1 10 )3 do4 mkdir /home/kuangl/aaa${k}5 cd /home/kuangl/aaa${k}6 for l in $( seq 1 10 )7 do8 mkdir bbb${l}9 cd /home/kuangl/aaa${k} 10 done 11 cd .. 12 done
说明:
行2,seq 用于产生从某个数到另外一个数之间的所有整数。
行4,在家目录下创建文件夹。
行6,在使用一个for循环创建文件夹
例2
列出var目录下各子目录占用磁盘空间的大小。
1 #!/bin/bash 2 DIR="/var" 3 cd $DIR 4 for k in $(ls $DIR) 5 do 6 [ -d $k ] && du -sh $k 7 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 doecho $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
1 #!/bin/bash 2 declare -i i=1 3 declare -i sum=0 4 while ((i<=10)) 5 do 6 let sum+=i 7 let i++ 8 done 9 echo $sum
1 #!/bin/bash 2 declare -i i=1 3 declare -i sum=0 4 while ((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的值为55
例3 while99乘法表
1 #!/bin/bash2 a=13 b=14 while ((a <=9))5 do6 while ((b<=a))7 do8 let "c=a*b" #声明变量c9 echo -n "$a*$b=$c " 10 let b++ 11 done 12 let a++ 13 let b=1 #因为每个乘法表都是1开始乘,所以b要重置 14 echo "" #显示到屏幕换行 15 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乘法表
1 #!/bin/bash2 a=13 b=14 until ((a>9)) #until 和while相反,条件假的执行,条件真就done结束5 do6 until ((b>a))7 do8 let "c=a*b"9 echo -n "$a*$b=$c " 10 let b++ 11 done 12 let a++ 13 let b=1 14 echo "" 15 done
说明:
行4,如果条件测试:只要a值未超过9,就进入循环,一旦超过9就不执行,until和while条件相反,条件真就done结束
行6,b>a,一旦b大于a就不执行了
Shell脚本中的循环相关推荐
- shell 脚本中while 循环只执行一次的问题
自己写的一个获取所有远程服务器数据库启动配置信息的bash 脚本,发现循环里的ssh远程命令只能执行一次,感觉很奇怪,以前没这么使用过, 我的脚本为 #!/bin/bash ## generate a ...
- shell脚本中for循环及while循环写法
for循环 例1 **展示上面的数组 #!/bin/bash #脚本名称为222.sh name1="nihao1" name2="nihao2" name3= ...
- shell脚本for循环_了解Shell脚本中的for循环
shell脚本for循环 Continuing on from our previous tutorials, let's understand the for loop in shell scrip ...
- Shell脚本中循环select命令用法笔记
在Shell脚本中,select命令是一种菜单扩展的循环方式. 语法结构如下: select Menu in (list) do command done 说明:当程序运行到select语句时,会自动 ...
- Shell脚本中循环until命令用法笔记
在shell脚本中,可以使用until执行循环处理,如果使用until命令的话如果表达式的结果为false时才执行循环体,直到测试表达式的值为true的时候才会 停止循环. 语法结果如下: until ...
- 【Linux】Shell脚本中如何使用“循环”遍历“数组”中的元素(包括MySQL的常用指令介绍)
一.背景 实习过程中,今天mentor突然让我拉取一下远端园区数据库中的部分信息,因为包含很多不同园区的数据信息,而且要以园区为单位生成文件来对数据进行存放,因此自然是需要使用shell脚本来自动生成 ...
- 【shell脚本】沐风晓月跟你聊聊shell脚本中的while循环
前言 上篇文章我们探讨了for循环,如果你还没有开始学习,可以点击链接学习:https://blog.csdn.net/wisdom_futrue/article/details/131402075 ...
- shell脚本中的特殊变量与if条件测试
1.特殊变量 实际工作中我们不可避免的遇到一些xxxx.sh脚本文件,实际阅读shell脚本代码时经常会遇到很多特殊变量(例如:$0.$n.$#.$@.$*.$?.$$等),我们常常会被这些特殊符号折 ...
- 数组-在Shell脚本中的基本使用介绍
2019独角兽企业重金招聘Python工程师标准>>> Shell脚本在运维工作中是极其重要的,而数组在shell脚本里的运用无论是在循环或运算方面都是非常实用的一个环节. 下面是对 ...
最新文章
- jupyter读取图片并展示的两种方法
- 【翻译】CEDEC2012 SQUARE ENIX GPGPU实现高速GI烘培工具的方法
- linux grub2 等待时间修改
- [探讨]route print PC与交换机的区别
- TPC-W安装与配置(威斯康星大学Java版)
- 量子力学 一 基础1 角动量
- synchronousqueue场景_java并发队列之SynchronousQueue
- 关于node.js 和vue.js的安装、卸载、浏览器测试问题?
- 处理器(CPU)发展简史
- vc 6.0添加c文件 fatal error C1010解决办法
- UpdateData()函数使用
- Redis集群环境搭建
- 【VRP】基于matlab禁忌搜索算法求解初始点和终点确定的取送货路径问题【含Matlab源码 1224期】
- w10投影全屏设置_win10投影仪怎么铺满全屏|win10投影器全屏的设置方法
- 抓取百度页面html,百度蜘蛛不抓取页面的解决方法
- 谷歌邮箱lmap服务器填什么_google邮箱设置方法是什么?
- 小小总结之渗透测试面试题以及答案
- 【模电知识总结】MOS管
- 通过运营界面上传图片失败,浏览器提示上传文件时发生HTTP错误(错误代码:500)
- 基于一道ctf 引发的 TP链分析
热门文章
- 突发!顶尖大学教授跑步后洗澡晕倒猝逝,年仅53岁
- .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock
- 周杰伦等名人网站频被挂马 粉丝上网需警惕
- 20221222英语学习
- 安卓系统管理软件_BlackBerry为部署车载安卓系统保驾护航
- 篮球比赛24秒能不能用计算机控制,请问篮球24秒倒计时牌哪家是全金属面板的?...
- linux监控工具等--zz
- UltraISO制作系统ISO镜像
- sqlserver with(nolock)
- JavaWeb项目+MVC三层架构+Mysql+Tomcat+汽车配件销售系统前后端+可以用于学习javaweb项目入门