69.for while循环 continue break exit

本文介绍了Shell脚本中for循环、while循环的基础语法及实际应用案例,并详细解释了break、continue和exit在循环控制中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20.10 for循环

20.11/20.12 while循环

20.13 break跳出循环

20.14 continue结束本次循环

20.15 exit退出整个脚本

扩展

select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html

 

 

 

 

 

20.10 for循环:

 

 

 

 

for循环会以空格或回车作为一个分隔符来遍历的。如果for循环一个文件的话,文件名含有空格,他会认为这个两个文件

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

~2.for循环案例1(需求:计算1-100所有数字的和)

#!/bin/bash

sum=0 #首先赋予sum的值等于0,稍后引用这个sum

for i in `seq 1 100` #for循环出1-100的数字

do #然后做什么?

    sum=$[$sum+$i] #赋予这个sum的变量,等于0+1到100。也就是利用上面那个sum赋予这个sum相加的动作

    echo $i #显示出1到100这个循环。不加上的话,直接显示相加的总数字

done #结束

echo $sum #最后显示$sum这个变量

 

~3.for循环案例2(需求:把etc目录做遍历。把etc目录下的子目录全部列一下)

文件列表循环

#!/bin/bash

cd /etc/

for a in `ls /etc/`

do

    if [ -d $a ]

    then

       ls -d $a #列出etc下的子目录。并不包括子子目录

    fi

done

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

 

20.11/20.12 while循环:

 

 

 

 

 

~1.语法 while 条件; do … ; done

~2.案例1(需求:每个半分钟检查系统的负载,当负载大于10的时候就发一封邮件)

#!/bin/bash

while : #冒号为死循环。也可以写成true(真)。一样的效果

do

    load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` #把load赋值

w为 查看系统负载的

head -1为 查看他的第一行

awk -F 'load average: ' '{print $2}' 为以load average作为分隔符。并打印这一行的第二段。注意,以load average作为分隔符的时候后面可以加上一个空格,因为出来的负载值前面有个空格,要把这个空格消掉

cut -d. -f1 为以点为分隔,截取第一段

就达到了我们w查看1分钟之内的系统负载

    if [ $load -gt 10 ] #当他大于10的时候

    then #然后发邮件

       /usr/lib/zabbix/alertscripts/mail.py "load is high: $load" asldkfls@11.com

#我们用之前zabbix上写的mail.py来发送邮件

#双引号里面的是主题

#后面的是发送给谁

    fi

    sleep 30 #30秒查一次

done

~3.案例2(需求:也是一个死循环。要求与人有交互,当输入空格的时候怎么样,输入数字的时候怎么样)也个就是让用户不停地输入数字的一个脚本。用到了continue、break

#!/bin/bash

while :

do

read -p "Please input a number: " n

if [ -z "$n" ]

then

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 #跳出这个脚本的循环(满足以上俩个条件后,跳出循环)

done

echo $n #最终显示$n(输入的打印出来)

 

!!小知识点,当写脚本的需要中文的时候,出现乱码,可能是没有设置中文的UTF8。LANG=zh_CN.UTF8

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

20.13 break跳出循环:

 

 

 

 

break用在循环里,for也行,while也可以

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ] #如果截取的是字符串就要用==(比如单词),数字的话用-eq

#也就是当$i等于3的时候,就不显示了。因为下面跳出这个循环了

    then

        break

    fi

    echo $i

done

echo aaaaaaa

[root@axinlinux-01 shell]# sh break1.sh #跳出循环并没有显示4 5

1

1

2

2

3

aaaaaaa

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

20.14 continue结束本次循环:

 

 

 

 

 

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

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]

    then

        continue

    fi

    echo $i

done

echo $i

[root@axinlinux-01 shell]# sh continue

1

1

2

2

3 #在if [$i == 3 ]的时候就直接结束这次循环。继续执行下面的循环。跟break不同,break是直接跳出了,结束了

4

4

5

5

aaaaaaa

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

20.15 exit退出整个脚本:

 

 

 

 

~1.直接退出整个脚本,下面的所有不执行

#!/bin/bash

for i in `seq 1 5`

do

    echo $i

    if [ $i == 3 ]

    then

        exit 2 #这里可以定义exit的数字,也就是我们echo $?时的值

    fi

    echo $i

done

echo aaaaaaa

[root@axinlinux-01 shell]# sh exit.sh

1

1

2

2

3

[root@axinlinux-01 shell]# echo $?

2

 

 

 

总结:

continue 结束本次循环

break 结束整个循环

exit 退出整个脚本

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/2054884

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值