Shell脚本中循环语句for,while,until用法

Bertha 。 2023-09-24 07:49 207阅读 0赞



  循环语句:

  Bash Shell中主要提供了三种循环方式:for、while和until。

  一、for循环

  for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。

  其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

  for的语法结构如下:

  for 变量 in 串行

  do

  执行命令

  done

  说明:

  行1,讲串行中的字段迭代放入变量中

  行2-4,接着将重复执行do和done之间的命令区域,直到串行中每一个字段军处理过为止。

  流程图:

  for.png

  用例1

  用for循环在家目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的目录

  #!/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循环创建文件夹

  测试结果:

  [root@test01 kuangl]# ll

  total 80

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8

  drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9

  [root@test01 kuangl]# cd aaa1

  [root@test01 aaa1]# ll

  total 40

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8

  drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb9

  用例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计算该目录占用磁盘空间的大小。

  测试结果:

  [root@test01 scripts]# https://blog.51cto.com/kling/var.sh

  276M cache

  4.0K cvs

  84K db

  8.0K empty

  4.0K ftp

  4.0K games

  4.0K gdm

  21G lib

  4.0K local

  16K lock

  7.4G log

  4.0K logs

  0 mail

  4.0K nis

  4.0K opt

  4.0K preserve

  336K run

  3.7G spool

  212K tmp

  4.1G www

  4.0K yp

  二、while循环

  while循环的语法:

  while 条件测试

  do

  执行命令

  done

  说明:

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

  不进入循环,介绍while 命令

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

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

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

  流程图:

  while.png

  用例1

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

  #!/bin/bash

  while read kuangl

  do

  echo ${kuangl}

  done < /home/kuangl/scripts/testfile

  说明:

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

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

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

  测试结果:

  [root@test01 scripts]# https://blog.51cto.com/kling/while\_test01.sh

  aaaaaaa

  bbbbbbb

  用例2:

  #!/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

  测试结果:

  [root@test01 scripts]# https://blog.51cto.com/kling/while\_02.sh

  55

  三、until循环

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

  until循环的语法:

  until 条件测试

  do

  执行命令

  done

  说明:

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

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

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

  流程图:

  until.png

  用例1:

  #!/bin/bash

  declare -i i=10

  declare -i sum=0

  until ((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的值为10

  测试结果:

  [root@test01 scripts]# https://blog.51cto.com/kling/until\_test01.sh

  10

发表评论

表情:
评论列表 (有 0 条评论,207人围观)

还没有评论,来说两句吧...

相关阅读