六十九、for循环、while循环、break跳出循环、continue结束本次循环、exit退出整

六十九、for循环、while循环、break跳出循环、continue结束本次循环、exit退出整个脚本

一、for循环

语法:for 变量名 in 条件; do …; done


案例1

# vim for1.sh

#!/bin/bash

sum=0

for i in `seq 1 100`

do

sum=$[$sum+$i]     //核心语句

echo $i

done

echo $sum

//最后再echo $sum,不能在for循环里echo,不然每次的sum都打印出来了。让它每次都打印出来也没有错,就像下面这么写。


# vim for2.sh

#!/bin/bash

sum=0

for i in `seq 1 100`

do

echo "$sum + $i"

    sum=$[$sum+$i]         //核心语句

//第一次循环:0+1=1,第二次循环:1+2=3,第三次循环:3+3=6,以此类推

    echo $sum

done

echo $sum

# sh for2.sh  //执行这个脚本可以看出过程。


文件列表循环(用得比较多,对文件做循环)

#!/bin/bash

cd /etc/

for a in `ls /etc/`

do

    if [ -d $a ]

    then

       ls -d $a

    fi

done


# for i in `ls ./`; do echo $i" ; done         //for循环这样用的话都作为一个分隔符


二、while循环

语法 while 条件; do 循环的内容 ; done

案例1

#!/bin/bash

while :          //这里冒号就是死循环的意思,也可以写true,一样的效果

do

    load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`  //这条命令会把系统负载赋值到load这个变量里。

    if [ $load -gt 10 ]

    then

        /usr/local/sbin/mail.py|13975801346@163com "load high" "$load"

    fi

    sleep 10

done

案例2

#!/bin/bash

while :

do

   read -p "Please input a number: " n

   if [ -z "$n" ]       //当你输入的变量n取值为空时,然后输出需要输入内容

   then    //如果n不为空时,就不执行下面这两条命令,而是执行n1及后面的内容

       echo "you need input sth."     //你需要输入内容

       continue                //重新执行从头开始的内容,后面的内容就不执行了

   fi

   n1=`echo $n|sed 's/[0-9]//g'` //把数字清空再判断内容是否为空,以此判断是不是纯数字

   if [ -n "$n1" ]

   then

       echo "you just only input numbers."      //你只能输入一个纯数字

       continue        //从头开始执行,循环。

   fi

   break        //当是纯数字,就break,跳出这个循环,然后echo $n

done

echo $n

# sh -x while2.sh   //将变量输入为空,再输入英文,都会再次死循环,只有输入纯数字时,才会跳出这个循环。

+ :

+ read -p 'Please input a number: ' n

Please input a number:

+ '[' -z '' ']'

+ echo 'you need input sth.'

you need input sth.

+ continue

+ :

+ read -p 'Please input a number: ' n

Please input a number: aa

+ '[' -z aa ']'

++ echo aa

++ sed 's/[0-9]//g'

+ n1=aa

+ '[' -n aa ']'

+ echo 'you just only input numbers.'

you just only input numbers.

+ continue

+ :

+ read -p 'Please input a number: ' n

Please input a number: 123

+ '[' -z 123 ']'

++ echo 123

++ sed 's/[0-9]//g'

+ n1=

+ '[' -n '' ']'

+ break

+ echo 123

123


三、break跳出循环

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]        //这里两个等于号正确的写法应该是-eq,比较数字时,就应该用eq,ge,lt这些,当是比较字符串时,就需要用==号了,用eq就不对了。这样写也没问题

    then

        break

    fi

    echo $i

done

echo aaaaa


# sh -x break.sh

++ seq 1 5

+ for i in '`seq 1 5`'

+ echo 1

1

+ '[' 1 == 3 ']'

+ echo 1

1

+ for i in '`seq 1 5`'

+ echo 2

2

+ '[' 2 == 3 ']'

+ echo 2

2

+ for i in '`seq 1 5`'

+ echo 3

3

+ '[' 3 == 3 ']'

+ break           //这里不再echo 3了,直接break

+ echo aaaaa

aaaaa

# sh break.sh

1

1

2

2

3

aaaaa


break,continue,用在循环语句里,for或者while都可以

四、continue结束本次循环

忽略continue之下的代码,直接进行下一次循环

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]

    then

        continue

    fi

    echo $i

done

echo $i

# sh continue.sh

1

1

2

2

3        //这里3只echo了一次

4

4

5

5

aaaaa

# sh break.sh

1

1

2

2

3

aaaaa

五、exit退出整个脚本

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]

    then

        exit   //这里可以加一个数字,比如2,再echo $?的时候就不是0而是2

    fi

    echo $i

done

echo aaaaaaa


# sh exit.sh

1

1

2

2

3

到3就结束了,连aaaaa都不输出了


猜你喜欢

转载自blog.51cto.com/13576245/2125335