循环语句:
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用法的更多相关文章
-
自动化运维必须要学的Shell脚本之——循环语句(for、while和until循环)
1. 循环前先了解echo的使用 1.1 echo -n 表示不换行输出 1.2 echo -e 输出转义字符,将转义后的内容输出到屏幕上 常见的转义字符有: 1.2.1 \b 相当于退格键 转义后相 ...
-
shell脚本之循环语句 for-while-until
目录: 一.for循环语句 二.while循环语句 三.unti循环语句 一.for循环语句 读取不同的变量值,用来逐个执行同一组命令 举例 批量添加用户◆ 用户名存放在users.txt文件中, ...
-
shell脚本中select循环语句用法
shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...
-
在shell脚本中进行条件控制以及使用循环
转载请标明:http://www.cnblogs.com/winifred-tang94/ if条件语句语法: if [ 条件表达式 ] then 代码 else 代码 fi 注意:在上面的if条件语 ...
-
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
-
shell脚本、if语句、for循环语句
shell在shell脚本中,如果用户不输入东西,系统不自动退出,this is a bug!文件测试语句:-d -f -r -w -x -e逻辑测试语句:“&&”与(同时满足) “| ...
-
shell脚本中的case条件语句介绍和使用案例
#前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...
-
Shell脚本中执行sql语句操作mysql
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
-
Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
随机推荐
-
T4:T4 笔记 + Trait 示例
背景 官方教程:http://msdn.microsoft.com/en-us/library/vstudio/bb126445.aspx. 如果开发环境或编译器内置了对模板的支持而没有善加利用,就算 ...
-
codeforces723 D. Lakes in Berland(并查集)
题目链接:codeforces723 D. Lakes in Berland 参考博客:http://www.cnblogs.com/Geek-xiyang/p/5930245.html #inclu ...
-
JavaScript 垃圾回收机制分析
同C# .Java一样可以手工调用垃圾回收程序,但是由于其消耗大量资源,而且手工调用的不会比浏览器判断的准确,所以不推荐手工调用垃圾回收. 最近精力主要用在了Web 开发上,读了一下<Jav ...
-
Socket缓冲区探讨,是否有拆包的方式?
Socket缓冲区探讨 本文主要探讨java网络套接字传输模型,并对如何将NIO应用于服务端,提高服务端的运行能力和降低服务负载. 1.1 socket套接字缓冲区 Java提供了便捷的网络编程模式, ...
-
【译】使用requestIdleCallback
原文地址:http://galen-yip.com/2015/10/07/%E3%80%90%E8%AF%91%E3%80%91%E4%BD%BF%E7%94%A8requestIdleCallbac ...
-
使用http-server创建本地服务
在很多情况下, 都需要开启本地http服务器来测试, 所以就需要一个简单省事的http服务器, , 以前的时候可以使用express或者webpack-dev-server来启动一个服务, 这未免有点 ...
-
MariaDB数据表操作实例
1. MariaDB 数据库操作实例 MariaDB>create database class; //创建class数据库 MariaDB>use class; MariaDB>c ...
-
FTP服务器原理(转)
本文转自https://www.cnblogs.com/Aiapple/p/5955736.html 感谢作者 21.1 FTP服务器原理 使用明码传输方式,且有相当多的安全危机历史.因此一般 ...
-
MVC 模式——第3章
在深入到 ASP.NET MVC 框架的细节之间,最好熟悉 MVC 的设计模式及其背后的思想.良好地理解 MVC 背后的内容,有助于在阅读本书的过程中将该框架的特性放到相关的情境之中. 3.2 理解 ...
-
SVN服务器搭建和使用(四)
在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...