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}
do
mkdir /datas/aaa$a
cd /datas/aaa$a
for b in {1..10}
do
mkdir bbb$b
done
done
1 #!/bin/bash
2 for k in $( seq 1 10 )
3 do
4    mkdir /home/kuangl/aaa${k}
5    cd /home/kuangl/aaa${k}
6    for l in $( seq 1 10 )
7    do
8    mkdir bbb${l}
9    cd /home/kuangl/aaa${k}
10    done
11    cd ..
12 done
shell脚本返回执行结果说明:
⾏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
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
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 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/bash
2 a=1
3 b=1
4 while ((a <=9))
5 do
6        while ((b<=a))
7        do
8                let "c=a*b"  #声明变量c
9                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循环的语法:
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乘法表

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。