Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的。常用到的循环有for循环和while循环。下面就分别介绍一下两种循环的结构。
【for循环】:
Shell脚本中的for循环示例:
#! /bin/bash ## author:Xiong Xuehao ## Use for in this script. for i in `seq 1 5`; do echo $i done
脚本中的seq 1 5 表示从1到5的一个序列。你可以直接运行这个命令试下。脚本执行结果为:
通过这个脚本就可以看到for循环的基本结构:
for 变量名 in 循环的条件; do
command
done
循环的条件那一部分也可以写成这样的形式,中间用空格隔开即可。你也可以试试,for i in `ls`; do echo $i; done 和 for i in `cat test.txt`; do echo $i; done 。
【while循环】:
再来看看这个while循环,基本格式为:
while 条件; do
command
done
#! /bin/bash ## author:Xiong Xuehao ## Use while in this script. a=10 while [ $a -ge 1 ];do echo $a a=$[$a-1] done
脚本的执行结果为:
另外你可以把循环条件忽略掉,笔者常常这样写监控脚本。
while :; do
command
done
示例:
#! /bin/bash ## author:Xiong Xuehao ## Monitoring alarm. while : do load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` if [ $load -gt 10 ] then /usr/local/sbin/mail.py xxxxxxxxxx@qq.com "load high" "$load" fi sleep 30 done
Shell脚本(for循环,while循环里面使用 break跳出循环,continue结束本次循环)
在看脚本之前,我们需要知道continue和break的意思:
continue是继续的意思,也就是当运行结果不满足条件时,在从头循环一遍。(通俗理解是:跳过本次循环剩余部分,直接开始下一轮循环)
break是跳出循环的意思。(通俗理解是退出整个循环)。
注意break、continue仅在`for', `while', 或者`until' 循环中有意义。
下面先来看for循环中使用break的例子:有5个人参加抢答游戏,但是只有3个名额剩余的都淘汰。从1,2,3,4,5报数,数到3时结束。
#! /bin/bash ## author:Xiong Xuehao ## 循环语句里面的continue和break. for i in `seq 1 5`; do echo -n "$i" if [ $i -ge 3 ]; then echo "名额满了,剩下的都离开吧" break else echo "继续" fi done
如图:
下面来看for循环中使用continue的例子:有5个人参加抢答游戏,前两名2个名额,迟到的都罚站。从1,2,3,4,5报数,从第3名开始及以后的都罚站。
#! /bin/bash ## author:Xiong Xuehao ## 循环语句里面的continue和break. for i in `seq 1 5`; do echo -n "$i" if [ $i -ge 3 ]; then echo "迟到了,罚站" continue else echo "继续" fi done
如图:
上面两个例子注意看区别哦。
再看一个for循环的脚本,将break个continue结合起来使用的例子:
要求输入一个数字,如果输入内容不是数字返回一个字符串提醒,如果输入为空也返回一个字符串提醒,如果是输入数字则将该数字显示出来。
#! /bin/bash ## author:Xiong Xuehao ## 循环语句里面的continue和break. 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 done echo $n
执行如图:
【完】