前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >for 循环,while循环,break,continue,exit

for 循环,while循环,break,continue,exit

作者头像
老七Linux
发布2018-05-09 16:51:55
1.2K0
发布2018-05-09 16:51:55
举报
一、for循环

常见的两种循环,在脚本中普遍被用到。

  • for循环
  • while循环
语法:for 变量名 in 条件; do …; done

为了更加方便的上手for循环,讲理论是不足矣理解到位的,所以我们脚本来讲。

用for循环来写个1-100的求和。
代码语言:javascript
复制
#!/bin/bash
sum=0
for i in `seq 1 100`
do
    sum=$[$sum+$i]
    echo $i
done
echo $sum

思路

  • 首先需要把1-100循环
  • 循环一次相加一次,并赋值给sum
  • 输出sum的值

seq 这个就是遍历1-100这些数字。

用for循环,遍历一个目录的目录或者文件
代码语言:javascript
复制
#!/bin/bash
cd /etc/            //脚本中如果查询的目录在多级目录下,首先要进入到目录,或者,直接跟绝对路径
for a in `ls /etc/`     //遍历/etc目录
do
    if [ -d $a ]        //一个一个的去判断是否为目录
    then
    ls -d $a    //如果是目录,就查看下目录内的文件+子目录
    fi
done

二、while循环

语法

代码语言:javascript
复制
while 条件; 

do … ;

done
用while do写一个死循环。

如果说写个脚本去监控系统的负载,我认为while语句最适合不过。

思路:

  • 脚本一定要在后台去监控并执行
  • 如何得到负载值
  • 发现超过负载需要发邮件
代码语言:javascript
复制
#!/bin/bash
while :         //:为死循环的意思
do
    load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
if [ $load -gt 10 ]
then
    top|mail -s "load is high: $load" [email protected]
fi
sleep 30
done

如上把系统负载赋值到load中,然后针对load做判断。 awk, sed,cut 就是之前所讲的shell基础知识(也就是想方设法的搞到负载值,然后再去判断),最后的mail就是用来发邮件的。

负载有时候不可能一秒钟就起来了,所以每隔30秒判断一次即可。我们使用sleep 去暂停30秒钟。然后再次执行。。。

当然这种脚本如何让它在后台运行坚持呢? 在一个新的screen执行即可。

第二个案例:

通过和用户的交互得到一个值,并判断。

把用户输入的数字输出.

  • 首先判断,如果用户没有输入怎么办?
  • 用户输入的不是纯数字怎么办?
  • 根据用户输入的数字,并输出。
代码语言:javascript
复制
#!/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

continue: 当用户没有输入的时候,首先提示,然后继续让用户输入。直到输入是一个真正的数字,跳出if语句。

break:如果是一个真正的数字,则跳出整个while语句。


break 的用法:

用一个小脚本来解释 break 的用法:

代码语言:javascript
复制
#! /bin/bash

for i in `seq 1 5`
do 
	echo $i
if [ $i == 3 ]
then
	break
fi
echo $i
done
echo aaa

执行步骤如下:

代码语言:javascript
复制
[[email protected]-01 sbin]# 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 aaa
aaa

也就是说,一旦遇到break就会跳出当前循环,进行下一步、


continue 的用法:

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

代码语言:javascript
复制
#! /bin/bash

for i in `seq 1 5`
do 
	echo $i
if [ $i == 3 ]
then
	continue
fi
echo $i
done
echo aaa

执行结果如下:

代码语言:javascript
复制
1
1
2
2
3
4
4
5
5
aaa

也就是说,当执行到continue的时候,下面任何语句直接忽略。。直接进行了下一次for循环。


exit 退出整个脚本
代码语言:javascript
复制
#! /bin/bash

for i in `seq 1 5`
do 
	echo $i
if [ $i == 3 ]
then
	exit
fi
echo $i
done
echo aaa

执行步骤如下:

代码语言:javascript
复制
++ 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 ']'
+ exit

当直行到3的时候,直接就退出脚本 。


总结:

continue:仅仅 结束 本次循环

break:结束 整个循环

exit:退出 整个脚本

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/09/14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、for循环
    • 语法:for 变量名 in 条件; do …; done
      • 用for循环来写个1-100的求和。
        • 用for循环,遍历一个目录的目录或者文件
        • 二、while循环
          • 用while do写一个死循环。
            • 第二个案例:
            • break 的用法:
            • continue 的用法:
            • exit 退出整个脚本
            • 总结:
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档