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

[toc]编程

1、for循环

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

常见的两种循环,在脚本中广泛被用到。bash

for循环
while循环ide

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

for var in list
do
  commands
done

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

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

思路:input

  • [ ] 首先须要把1-100循环
  • [ ] 循环一次相加一次,并赋值给sum
  • [ ] 输出sum的值
  • seq 这个就是遍历1-100这些数字。
[root@xavi ~]# !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
[root@xavi ~]# !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循环时,会以空格或回车符做为分隔符了it

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

2、while循环

语法:for循环

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" asd123@126.com
fi
sleep 30
// 负载有时候不可能一秒钟就起来了,因此每隔30秒判断一次便可。咱们使用sleep 去暂停30秒钟。而后再次执行。。。
done

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

把用户输入的数字输出.class

  • [ ] 首先判断,若是用户没有输入怎么办?
  • [ ] 用户输入的不是纯数字怎么办?
  • [ ] 根据用户输入的数字,并输出。
#!/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语句。test

  • [ ] break:若是是一个真正的数字,则跳出整个while语句。

3、break的用法

示例:

#! /bin/bash

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

执行步骤以下:

[root@xavi 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就会跳出当前循环,进行下一步。

4、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循环。

5、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的时候,直接就退出脚本 。
相关文章
相关标签/搜索