shell-3

for循环

  • 常用到的循环有for和while。

  • for循环的语法

for  变量名  in 条件 ; do ... ; done

案例(将1到100的数字相加求和)

#!/bin/bash 
sum=0
for  i in ` seq 1 100 ` 
do 
   sum=$[$sum+$i] //核心语句
   echo $i 
 done 
 echo $sum   
[root@zcy-1 ~]# cat for1.sh 
#!/bin/bash
sum=0 
for i in  `seq 1 100 `
do   
    echo "$sum + $i "

     sum=$[$sum+$i]
     echo $sum
done 
  echo $sum 
[root@zcy-1 ~]# sh for1.sh 
0 + 1 
1
1 + 2 
3
3 + 3 
6
6 + 4 
10
10 + 5 
15
15 + 6 
21
21 + 7 
28
28 + 8 
36
36 + 9 
45
45 + 10 
55
55 + 11 
66
  • 针对文件列表循环
    案例 :将/etc/目录下所有的目录罗列出来,并统计
#!/bin/bash 
cd /etc/  
for a in `ls  /etc/ `
do 
  if [ -d $a ]
  then  
    echo $a 
    ls   $a 
  fi 
done 
  • 最常用的for循环格式
for i in  `seq 1 5 ` ; do echo $i ; done 
for i in  1 2 3 4 5  ; do echo $i ; done
  • 如果使用上面的格式时,for循环是已空格或者回车键做为分隔符,需要注意
[root@zcy-1 123]#  ls -l 
总用量 0
-rw-r--r-- 1 root root 0 420 22:12 1
-rw-r--r-- 1 root root 0 420 22:12 3
-rw-r--r-- 1 root root 0 420 22:13 4 5.txt
[root@zcy-1 123]# for  i  in ` ls ./ ` ; do echo $i ; done
1
3
4
5.txt
[root@zcy-1 123]#  

while循环

  • while循环用来编写死循环的脚本,用于监控某项服务。

  • 语法

while 条件 ; do ... ; done 

案例:每30秒一次监控系统负载,当系统负载大于10的时候,发送邮件。

#/bin/bash
while :  /这里:表示死循环的意思,也可以写成1或者true
do
  load=`uptime|awk -F  'load average: '   '{print $2}'|cut -d . -f1`
  if [ $load -gt 10 ]  //比对
  then
      /usr/local/sbin/mail.py  493027219@163.com  "load high"  "$load"
       fi
 sleep 30
done
  • 案例2 ;循环中会进行交互,当输入数字会怎么样,当什么都不输入又会怎么样,当输入字母又会怎么样
#!/bin/bash
while :
do 
  read -p "Please input a number:" n 
  if [ -z "$n" ]
  then 
    echo "你需要输入东西"  
    continue  //表示继续执行,再一次上面的循环
  fi 
  n1=`echo $n|sed 's/[0-9]//g'`
  if [ ! -z $n1 ]
  then 
    echo "你只能输入一个纯数字"
    continue 
 fi 
 break //退出脚本的while循环
done 
echo $n     

break跳出循环

  • break结束本次循环

    案例

#!/bin/bash
for i in `seq 1 5 `
do 
  echo $i
  if [ $i -eq 3 ]  //比较字符串时需要使用==
  then 
    break   //当满足条件时,后面的45就不在比较了
  fi 
  echo $i 
done
  echo ok

continue结束本次循环

  • 它的作用就是忽略continue之下的代码,直接进行下一次循环
    案例
#!/bin/bash
for i in `seq 1 5 `
do 
  echo $i 
  if [ $i == 3 ] 
  then 
     continue 
  fi 
    echo $i
 done 
 echo $i

exit退出整个脚本

  • 案例
#!/bin/bash
for i in `seq 1 5 `
do 
  echo $i 
  if [ $i == 3 ] 
  then 
     exit  /可以定义echo $?的值
  fi
    echo $i 
 done 
 echo ok

当到达条件时,退出整个脚本 。

  • continue 是结束本次循环,继续循环。忽略后面的代码

  • break 是把整个循环结束,退出 不在循环

  • exit退出整个脚本

猜你喜欢

转载自blog.csdn.net/chunyang315/article/details/80025755