常见的两种循环,在脚本中普遍被用到。
为了更加方便的上手for循环,讲理论是不足矣理解到位的,所以我们脚本来讲。
#!/bin/bash
sum=0
for i in `seq 1 100`
do
sum=$[$sum+$i]
echo $i
done
echo $sum
思路:
seq 这个就是遍历1-100这些数字。
#!/bin/bash
cd /etc/ //脚本中如果查询的目录在多级目录下,首先要进入到目录,或者,直接跟绝对路径
for a in `ls /etc/` //遍历/etc目录
do
if [ -d $a ] //一个一个的去判断是否为目录
then
ls -d $a //如果是目录,就查看下目录内的文件+子目录
fi
done
语法:
while 条件;
do … ;
done
如果说写个脚本去监控系统的负载,我认为while语句最适合不过。
思路:
#!/bin/bash
while : //:为死循环的意思
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" [email protected]
fi
sleep 30
done
如上把系统负载赋值到load中,然后针对load做判断。 awk, sed,cut 就是之前所讲的shell基础知识(也就是想方设法的搞到负载值,然后再去判断),最后的mail就是用来发邮件的。
负载有时候不可能一秒钟就起来了,所以每隔30秒判断一次即可。我们使用sleep 去暂停30秒钟。然后再次执行。。。
当然这种脚本如何让它在后台运行坚持呢? 在一个新的screen执行即可。
通过和用户的交互得到一个值,并判断。
把用户输入的数字输出.
#!/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
continue: 当用户没有输入的时候,首先提示,然后继续让用户输入。直到输入是一个真正的数字,跳出if语句。
break:如果是一个真正的数字,则跳出整个while语句。
用一个小脚本来解释 break 的用法:
#! /bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
break
fi
echo $i
done
echo aaa
执行步骤如下:
[[email protected]-01 sbin]# 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 aaa
aaa
也就是说,一旦遇到break就会跳出当前循环,进行下一步、
忽略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循环。
#! /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的时候,直接就退出脚本 。
continue:仅仅 结束 本次循环
break:结束 整个循环
exit:退出 整个脚本
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有