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 4月 20 22:12 1
-rw-r--r-- 1 root root 0 4月 20 22:12 3
-rw-r--r-- 1 root root 0 4月 20 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 //当满足条件时,后面的4、5就不在比较了
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退出整个脚本