shell 编程 (三)-for 循环,while循环,break,continue,exit

[toc]

一、for循环

重复执行一系列命令在 编程中很常见。通常你需要重复一组命令直到达到某个特定条件,比如处理某个目录下的所有文件、系统上的所有用户或者是某个文本文件中的所有行。

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

for循环
while循环

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

for var in list
do
  commands
done

在list参数中,提供了迭代中要用的一系列值

示例1:用for循环来写个1-100的求和。

思路:

  • [ ] 首先需要把1-100循环
  • [ ] 循环一次相加一次,并赋值给sum
  • [ ] 输出sum的值
  • seq 这个就是遍历1-100这些数字。
[[email protected] ~]# !vim
vim sum01.sh

#!/bin/bash
sum=0
for i in `seq 1 100`
do
   sum=$[ $sum+$i ]
   echo $i
done
echo $sum

示例2: 遍历一个目录的目录或者文件

#!/bin/bash
cd /etc/            //脚本中如果查询的目录在多级目录下,首先要进入到目录,或者,直接跟绝对路径
for a in `ls /etc/`     //遍历/etc目录
do
    if [ -d $a ]        //一个一个的去判断是否为目录
    then
    ls -d $a    //如果是目录,就查看下目录内的文件+子目录
    fi
done
[[email protected] ~]# !vim
vim for02.sh

#!/bin/bash
cd /etc/
for a in `ls /etc/`
do
   [ -d $a ] && ls $a
 # 判断是否是目录,并列出其下文件和子目录
   if [ -d $a ]
   then
       echo $a
       ls $a
   fi
done
~             

特殊for循环示例:list循环时,会以空格或回车符作为分隔符了

[[email protected] ~]# mkdir xavi
[[email protected] ~]# cd xavi/
[[email protected] xavi]# ls
[[email protected] xavi]# touch 1 2
[[email protected] xavi]# touch 3\ 4.txt
[[email protected] xavi]# ls
1  2  3 4.txt
[[email protected] xavi]# for i in `ls ./`; do echo $i ; done
1
2
3
4.txt //把3 4.txt一个文件拆分成两个了

二、while循环

语法:

while test command
do
  other commands
  done

案例1:写个脚本去监控系统的负载

#!/bin/bash
while :         //:为死循环的意思,也相当于ture,
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
// 负载有时候不可能一秒钟就起来了,所以每隔30秒判断一次即可。我们使用sleep 去暂停30秒钟。然后再次执行。。。
done

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

把用户输入的数字输出.

  • [ ] 首先判断,如果用户没有输入怎么办?
  • [ ] 用户输入的不是纯数字怎么办?
  • [ ] 根据用户输入的数字,并输出。
#!/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" ]  // -n = ! -z ,记得加双引号
    then
        echo "you just only input numbers."
        continue
    fi
    break
done
echo $n
  • [ ] continue: 当用户没有输入的时候,首先提示,然后继续让用户输入。直到输入是一个真正的数字,跳出if语句。
  • [ ] break:如果是一个真正的数字,则跳出整个while语句。

三、break的用法

示例:

#! /bin/bash

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

执行步骤如下:

[[email protected] xavi]# 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 aaaa
aaaa

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

四、continue 的用法:

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

#! /bin/bash

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

执行结果如下:

1
1
2
2
3
4
4
5
5
aaa

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

五、exit 退出整个脚本

#! /bin/bash

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

执行步骤如下:

++ 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的时候,直接就退出脚本 。

原文地址:http://blog.51cto.com/12995218/2106160

时间: 2024-08-28 13:22:19

shell 编程 (三)-for 循环,while循环,break,continue,exit的相关文章

linux 循环结构中的 break continue exit return区别

1 概述 在脚本的循环中,需要用到break,continue,exit.来控制循环.利用return来获取函数的返回值.本文将对这四个命令的使用做介绍 break [N]:提前结束第N层循环,最内层为第1层 continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断:最内层为第1层 exit 命令终止脚本 2  break continue exit   对比 2.1 break 和continue 测试 假设一个循环体内,总共嵌套了3层循环,总循环体N为3,break 和con

[转帖]Shell脚本中的break continue exit return

Shell脚本中的break continue exit return 转自:http://www.cnblogs.com/guosj/p/4571239.html break结束并退出循环 continue在循环中不执行continue下面的代码,转而进入下一轮循环 exit退出脚本,常带一个整数给系统,如 exit 0 return在函数中将数据返回或返回一个结果给调用函数的脚本 我理解为:break是立马跳出循环:continue是跳出当前条件循环,继续下一轮条件循环:exit是直接退出整

break continue exit return 函数对比

break,continue,exit,用于循环结构中,控制循环的走向,return用于函数中,返回由shell函数得到的退出值给调用它的脚本. 命令 说明 break n n表示跳出循环的层次,如果省略n表示跳出整个循环 continue n n表示退到第n层继续循环,如果省略n表示跳过本次循环,忽略本次循环的剩余代码,进入循环的下一次循环 exit n 退出当前shell程序,并返回n.n也是可以省略 return 返回由shell函数得到的退出值给调用它的脚本 一.关于break,cont

break continue exit return 的区别

讲起这几个shell内置函数,有段搞笑的故事,博主本身学习linux的时候不专心,所以脚本很烂.. 有一天在玩一款拳皇的时候,听到continue一词,让博主很惊讶.至此开启爱上脚本的道路. 上简单的测试 [[email protected] day1]# cat ss.sh #!/bin/bash for ((i=0;i<5;i++)) do if [ $i -eq 3 ] then break #continue #exit fi echo $i;sleep 1done echo "o

for,break,continue,exit

if后接的是命令if rpm -q gcc && id tom||echo "sss"; &&如果前面的命令执行成功则执行&&后的命令否则执行||后面的命令 for 遇空格或回车算一次for i in tom jerry dofor i in *.sh{1..10}相当于1 2 3 4 5 6 7 8 9 10for i in {1..10}seq -w 10 等宽09 10seq 2 2 10 从2到10 每隔一个取一个数for i i

break , continue , exit

break , continue , exit #!/bin/bash . /etc/init.d/functions for i in `seq 1 10`;do if [ $i -eq 3 ];then #continue #没有数字3 break #exit fi echo $i done echo "ok~"

Shell基础(三):使用for循环结构、使用while循环结构、基于case分支编写脚本、使用Shell函数、中断及退出

一.使用for循环结构 目标: 本案例要求编写一个Shell脚本chkhosts.sh,利用for循环来检测多个主机的存活状态,相关要求及说明如下: 1> 对192.168.4.0/24网段执行ping检测      2> ping检测可参考前一天的pinghost.sh脚本      3> 脚本能遍历ping各主机,并反馈存活状态 执行检测脚本以后,反馈结果如下图所示. 方案: 在Shell脚本应用中,常见的for循环采用遍历式.列表式的执行流程,通过指定变量从值列表中循环赋值,每次复

Linux shell 编程(八):循环结构

循环语句 在shell中的循环语句如下: for while unitl case select for/while/unitl 必须以done结尾 for循环 for循环用来遍历数组(数据列表)或执行计算语句. 在shell中 for循环有两种形式 第一种用来遍历word序列的数据 word可以是以空格分隔的单词,数组变量或是数字区间/字母区间.示例: 循环次数为数据序列的个数,每一次循环时会把变量i赋值为本次循环到的数据,可以用在循环体中访问变量i. 第二种,示例: 在上面的循环中,expr

shell编程---字符测试及for循环

一.字符测试 ==:测试是否相等,相等为真,不等为假 !=: 测试是否不等,不等为真,等为假 > < -n string: 测试指定字符串是否为空,空则真,不空则假 -z string: 测试指定字符串是否不空,不空为真,空则为假 [ $username == $useername1 ] 等号两端必须要有空格 1.bc echo "scale=2;111/22;" | bc 计算两个数的保留两位小数 练习:写一个脚本 传递一个参数(单字符就行)给脚本,如参数为q.Q.qui

shell编程的for和while循环

1. for循环 语法1:for NAME [in WORDS ... ] ; do COMMANDS; done #!/bin/bashif [[ $# -lt 1 ]] ; then echo no param!!!; exit; fi for a in "[email protected]" ; do echo hello$a > ${a} ; done 如果参数的个数小于1,直接退出.否则把hello+参数名依次重定向到参数名作为文件名的文件. [email protec