71:循环之for、while、break、continue、exit

一、for循环语法:      for   变量名     in   条件;do......;doneshell

1:案例1:求1加到100的和:vim

[root@localhost_02 for]# vim for1.sh 
#!/bin/bash
sum=0
for i in `seq 1 100`
do 
  sum=$[$sum+$i]
echo $i
done
echo $sum

注释:首先须要给sum赋一个变量值0,进入for循环后,每循环一次,sum的值向上加一次就变化一次,一直到$i,最后输出结果$sum:bash

注释:加减法的固定格式: sum=$sum[$sum+$i]code

2:案例2:for循环文件列表,列出/etc/目录下的子目录:字符串

[root@localhost_02 for]# cat for2.sh 
#!/bin/bash
cd /etc/
for i in `ls /etc/`
do
   if [ -d $i ]
then
   echo $a
   ls -ld $i
fi
done
[root@localhost_02 for]# for i in `seq 1 3`;do echo $i;done
1
2
3
[root@localhost_02 for]# for i in 1 2 3;do echo $i;done
1
2
3

注释:for循环会以回车或者空格做为分隔符:以下:input

[root@localhost_02 test]# touch 1 2 
[root@localhost_02 test]# touch 3\ 4.txt
[root@localhost_02 test]# ls -la
-rw-r--r-- 1 root root  0 9月  26 16:45 1
-rw-r--r-- 1 root root  0 9月  26 16:45 2
-rw-r--r-- 1 root root  0 9月  26 16:45 3 4.txt
[root@localhost_02 test]# for i in `ls ./`;do echo $i;done
1
2
3
4.txt

二、while循环语法:while  条件;do .......;doneit

案例1:写一个监控负载的脚本:for循环

[root@localhost_02 shell]# cat while.sh 
#!/bin/bash
while :
#冒号表示循环,此处能够用1或者true均可以;
do 
     load=`uptime|awk -F 'load average: ' '{print $2}'|cut -d . -f1`
     if [ $load -ge 10 ]
     then 
              /usr/local/sbin/mail.py xxx@163.com "load high" "$load"
     fi
     sleep 30 
#休眠30秒后,继续检测系统的负载;
done
[root@localhost_02 shell]# sh -x while.sh 
+ :
++ awk -F 'load average: ' '{print $2}'
++ cut -d . -f1
++ uptime
+ load=0
+ '[' 0 -ge 10 ']'
+ sleep 30
若想这种脚本不意外的终止,能够打开screen,在screen跑脚本;

注释class

uptime表示查看awk系统的负载,(能够用w,不过须要结合head -1使用):test

awk -F 'load average: ' '{print $2}  表示以load  average为分隔符,并打印第二端:

cut -d .  -f1  表示用cut命令以 . 点做为分隔符,取第一个字符:

while循环案例2:输入一个数字,若是不是数字,则一直输入,输入是数字后则正常显示:

[root@localhost_02 shell]# cat while1.sh 
#!/bin/bash
while :
do 
      read -p "Please input 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
[root@localhost_02 shell]# sh while1.sh 
Please input number: 
you need input sth
Please input number: 
you need input sth
Please input number: sdfs
you just only input numbers
Please input number: 2
2

注释:contiune   继续循环:     

break:用于循环语句,直接结束全部循环:当数字等于3时,则结束全部循环:

注释:以下图例表示结束了if和for循环,而后继续打印echo内容:

[root@localhost_02 shell]# cat break.sh 
#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
#比较数字,用-eq ;如果比较的是字符串,那须要用 ==
    then
       break
    fi
    echo $i
done
echo aaaaa
检测:
[root@localhost_02 shell]# sh -x break.sh 
++ seq 1 5
+ for i in '`seq 1 5`'
+ echo 1
1
+ '[' 1 -eq 3 ']'
+ echo 1
1
+ for i in '`seq 1 5`'
+ echo 2
2
+ '[' 2 -eq 3 ']'
+ echo 2
2
+ for i in '`seq 1 5`'
+ echo 3
3
+ '[' 3 -eq 3 ']'
+ break
+ echo aaaaa
aaaaa
[root@localhost_02 shell]# sh break.sh 
1
1
2
2
3
aaaaa
[root@localhost_02 shell]#

continue:结束本次循环,忽略continue下面的代码,直接进行下一次循环:

注释:以下图例表示忽略了本次continue下的代码(条件是等于3),其他代码正常运行:

[root@localhost_02 shell]# cat con.sh 
#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
	continue
    fi
    echo $i
done
echo bbbbb
[root@localhost_02 shell]# sh con.sh 
1
1
2
2
3
4
4
5
5
bbbbb

exit:退出整个脚本,用来肯定脚本运行到什么位置时结束:

注释:以下图例表示直接退出整个脚本了:

[root@localhost_02 shell]# cat exit.sh 
#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
	exit
    fi
     echo $i
done
echo $ccccc
[root@localhost_02 shell]# sh exit.sh 
1
1
2
2
3
相关文章
相关标签/搜索