shell之循环结构

一循环语句

1.1 带列表的for循环语句

for variable in{list}

do

       statement1

done

(list为一个列表,for循环的执行次数与list中元数个数相关,shell将in关键字后面的list列表的第一个元素值赋给变量variabel,然后执行循环体,list元素都被访问完后,程序执行done语句后面的其他语句。)

例子:

#! /bin/bash

#for循环开始

for var in 1 2 3 45 6 7 8

do

   #依次输出列表中的数字

   echo "the number is $var"

done

结果:

the number is 1

the number is 2

the number is 3

the number is 4

the number is 5

the number is 6

the number is 7

the number is 8

另外,shell允许指定for语句的步长,基本语法为:

for variable in{start..end..step}

用字符串作为元素,可省略外面的大括号,如:

for day in mon tuewed thu

可以用ls命令的输出结果作为for循环的执行条件。如:

#! /bin/bash

#使用ls命令的执行结果作为列表

for file in $(ls)

do

   #输出每个文件名

   echo "$file"

done

($()的作用就是讲其中的字符串作为命令执行,可用`ls`替代。)

上面例子可以等价于

#! /bin/bash

#使用通配符作为列表条件,列出当前目录所有文件

for file in *

do

   echo "$file"

done

 列表for循环另一个比较重要的用途是处理脚本参数。可通过$*一次获取所有参数。用户可以通过将该系统变量获取的参数值作为for循环的条件列表。从而一次处理各个参数。

例子

#/bin/bash

#输出所有的参数

echo"$*"

#将参数列表作为条件

for arg in $*

do

   #依次输出各个参数值

   echo "${arg}"

done

执行:./ex5.sh a b c d

结果:a b c d

         a

         b

         c

         d

1.2 不带列表的for循环

for variable

do

       statement1

done

(没有条件列表,shell从命令行获取条件列表)

等价于

for variable in $@

do

       statement1

done

($@也是获取所有参数)

等价于

for variable in $*

do

       statement1

done

例子:
#! /bin/bash

#! /bin/bash

#不带条件列表

for arg

do

   #输出每个参数

   echo "$arg"

done

 for语句处理数组

for variable in${array[*]}

1.3 until语句

until expression

do

       statement1

done

(expression不为0执行statement1,执行完后继续判断expression,不为0,继续执行,为0则退出)

until批量增加用户:

#! /bin/bash

#定义变量i

i=1

#一直循环到变量i的值为21

until ["$i" -eq 21 ]

do

   #执行useradd命令添加用户

   useradd user$i

   #修改用户密码

   echo "password" | passwd --stdinuser$i > /dev/null

   #循环变量自增

   let "i++"

done

until循环删除系统用户:

#! /bin/bash

i=1

until ["$i" -eq 21 ]

do

   #依次删除用户

   userdel -r user$i

   let "i++"

done

1.4 whlie循环语句

while expression

do   

       statement1

done

(expression 为0执行循环体(即为真执行))

例子:

#! /bin/bash

#定义循环变量

i=1

#while循环开始

while [["$i" -lt 10 ]]      //小于10,为真,即0,执行循环体

do

   #计算平方

   let "square=i*i"

   #输出平方

   echo "$i*$i=$square"

   #循环变量自增

   let "i=i+1"

done

用户可在程序中设置一个特殊的标记值,当该标记值出现时,终止while循环。

例子:

#! /bin/bash

 #提示用户输入数字

echo "Pleaseenter a number between 1 and 10.Enter 0 to exit."

#读取用户输入的数字

read var

#while循环开始

while [["$var" != 0 ]]

do

   #提示用户输入数字太小

   if [ "$var" -lt 5 ]

   then

      echo "Too small. Try again."

      read var

   #提示用户输入数字太大

   elif [ "$var" -gt 5 ]

   then

      echo "Too big. Try again."

      read var;

    else

       echo "Congratulation! You areright."

       exit 0;

fi

(上面变量var是结束标记,为05时,退出循环)

1.5 嵌套循环:

例子1:九九乘法表:

#! /bin/bash

#外层循环

for((i=1;i<=9;i++))

do

   #内层循环

   for ((j=1;j<=i;j++))

   do

      #计算2个数的乘积

      let "product=i*j"

      #输出乘积

      printf "$i*$j=$product"

      #输出空格分隔符

      if [[ "$product" -gt 9 ]]

      then

         printf "   "

      else

         printf "    "

      fi

   done

   echo

done

1.6 break语句控制循环

break立即跳出某个循环,执行循环体后面的语句。

默认情况下,break退出一层循环,可在后面增加一个数字作为参数,指定要退出的循环参数。如:break2退出两层循环。

 1.7 continue语句控制循环

continue跳过当前循环体中该语句后面的语句,重新从循环语句开始的位置执行。

例子:

#! /bin/bash

for var in {1..10}

do

   #如果当前数字为奇数,重新循环

   if [[ "$var%2" -eq 1 ]]

   then

      #跳过后面的语句

      continue

   fi

   echo "$var"

done

结果:输出10以内的偶数

 注意:continue与break的本质区别是continue没有跳出循环结构


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值