Shell编程(for循环、while循环、break、continue、exit)

for循环

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

案例1: 需求:计算1-100求和 脚本实现:

#!/bin/bash
sum=0
for i in `seq 1 100` #设置遍历条件为1-100
do
  sum=$[$sum+$i]
  echo $i
done
echo $sum

案例2: 需求:遍历出指定目录下的目录名称 脚本实现:

#!/bin/bash
cd /tmp/ #进入目录这一步很重要
for a in `ls /tmp/`
do
  if [ -d $a ]
  then 
    ls -d $a
  fi
done

while循环

语法:while 条件; do … ; done

案例1: 需求:监控脚本,实现每隔30s检查一次负载,当系统的负载大于10的时候,发一封邮件(监控脚本),最小单元是任务计划 cron 脚本实现:

#!/bin/bash
while : # 冒号 : 表示死循环的意思,或者1,或者 true都是死循环
do
   load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1`
   if [ $load -gt 10 ]
   then
       /usr/local/sbin/mail.py xxx@qq.com "load high" "$load"
   fi
   sleep 30 #休眠30秒,因为检查系统负载,不需要一直监控,节省性能
done

ps :防止意外终止,可以打开screen,在screen运行脚本

上面脚本脚本用到的知识:

  • w //查看系统负载 ;
  • uptime 可以直接显示 w 系统负载的第一行,就可以省去 head -1
  • head -1 //取第一行
  • awk -F 'load average: ' '{print $2}' // 以'load average: '分隔,输出第二段
  • cut -d . -f1 // 以 . 分隔 取第一段

案例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" ]
   then
	echo "you just only input numbers."
        continue
   fi
   break # 退出循环
done
echo $n

break跳出循环

break 常用于循环语句中,跳出整个循环语句,直接结束所有循环

脚本示例:

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ] #比较数字,用-eq ;若是比较的是字符串,那需要用 ==
    then
       break
    fi
    echo $i
done
echo aaaaa

continue结束本次循环

结束本次循环,进行下一次循环

脚本示例:

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
       continue
    fi
    echo $i
done
echo aaaaa

执行脚本:3输出一次跳出,进行了下次循环

[root@yolks3 shell]# sh continue.sh 
1
1
2
2
3
4
4
5
5
aaaaa

exit退出整个脚本

exit直接结束退出整个脚本,可以定义退出的数值,可以用于确定脚本运行到什么地方的时候,结束

脚本示例:

#!/bin/bash
for i in `seq 1 5`
do
    echo $i
    if [ $i -eq 3 ]
    then
       exit
    fi
    echo $i
done
echo aaaaa

运行:执行到3后面的不再执行,直接退出脚本

[root@yolks3 shell]# sh exit.sh 
1
1
2
2
3

拓展

select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html

转载于:https://my.oschina.net/yolks/blog/2052861

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值