当前位置:网站首页>shell教程之循环语句for,while,until用法
shell教程之循环语句for,while,until用法
2022-06-29 17:53:00 【全栈程序员站长】
循环语句:
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/6files1 #!/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就不执行了
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101817.html原文链接:https://javaforall.cn
边栏推荐
- What is a SCM system? What are the advantages of a supply chain management system?
- VMware安装ESXI
- 给定一个数在序列中求最大异或值(01字典)
- Visual studio plug-in coderush officially released v22.1 -- visual tool for optimizing debugging
- 面试中问最常问的海量数据处理你拿捏了没?
- SRM supplier collaborative management system function introduction
- Industry application of smart city based on GIS 3D visualization
- mac安装php7.2
- Digital twin energy system, creating a "perspective" in the low-carbon era
- 测试dble split功能执行+导入耗时shell脚本参考
猜你喜欢

剖析下零拷贝机制的实现原理,适用场景和代码实现

Visio标注、批注位置

数字孪生能源系统,打造低碳时代“透视”眼

MATLAB 最远点采样(FPS)

How QQ opens online customer service

js两个二维数组合并并去除相同项(整理)

Basic operations such as MySQL startup under Windows platform

Issue 42: is it necessary for MySQL to have multiple column partitions

Image migration and data migration synchronization of old and new servers with different Alibaba cloud accounts

【目标跟踪】|stark配置 win otb
随机推荐
EasyCVR部署服务器集群时,出现一台在线一台不在线是什么原因?
QQ如何开通在线客服
js两个一维数组合并并去除相同项(整理)
/usr/bin/ld: warning: **libmysqlclient.so.20**, needed by //usr/
Jar包后台启动并输出日志
Basic operations such as MySQL startup under Windows platform
力扣每日一题 06.29 两数相加
mongoTemplate - distinct 使用
Opencv+yolo-v3 for target tracking
[webdriver] upload files using AutoIT
VMware安装ESXI
Proxmox VE Install 7.2
What is a SCM system? What are the advantages of a supply chain management system?
Function independent watchdog (iwdg) experiment based on stm32f103zet6 Library
Let Google search your blog
MaxCompute Studio
DevCloud加持下的青软,让教育“智”上云端
3h精通OpenCV(九)-最简单的人脸检测
Createstore for Redux source code analysis
从一个被应用商店坑了的BUG说起