#########################学习循环语句中的for和while#################################
(1)三个退出命令的区别:exit,break,continue
exit:退出当前的循环,脚本整体退出 ;
break:退出循环,但循环之后的命令依旧会执行;
continue:退出本次循环进行下一次循环;
实例演示: vim file.sh
执行脚本:
[root@node1 mnt]# sh file.sh //正常执行
1
2
3
4
5
hello world!
[root@node1 mnt]# sh file.sh exit //exit退出当前的循环,脚本整体退出
1
2
[root@node1 mnt]# sh file.sh break //break只管当前的退出
1
2
hello world!
[root@node1 mnt]# sh file.sh continue //continue结束当前的,但不退出循环
1
2
4
5
hello world!
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
(2)for 语句:
循环定义变量,依次执行,批量处理;
有以下几种格式:
for NUM in 1 2 3
for NUM in {1..3}
for NUM in {a..f}
for NUM in `seq 1 3 `
for NUM in `seq 1 2 5` //可以设定步长;2就是步长,输出为 1 3 5
注意:{1..5}是1到5,`seq 1 5 `也是1到5,但seq可以设定步长
还可以是计算的方式(和C语言类似)
for((A=1;A<=10;A++))
do
done
1)脚本示例:
把所有的数据库备份成文件,执行脚本文件备份的数据库放在/mnt/mysql_dump/目录下,并且文件属性为.sql
vim /mnt/mysql-dump.sh
#!/bin/bash
DATABASE_MESSAGE=`mysql -uroot -EN -e "show databases;" | grep -E "^\*|schema$" -v`
mkdir -p /mnt/mysql_dump
for DATABASE in $DATABASE_MESSAGE
do
mysqldump -uroot $DATABASE > /mnt/mysql_dump/$(DATABASE).sql
[ "$?" -eq "0" ] && {
echo -e "\033[31m$DATABASE is backuped!\033[0m"
}
done
sh /mnt/mysql-dump.sh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
测试:查看/mnt/mysql_dump目录下是否有以sql结尾的文件.
(3)while 语句
格式:
while 判断条件
do 动作
done
- 1
- 2
- 3
示例:1)刷新时间
vim /mnt/test.sh
2)如果分区使用率超过80%,系统提出报警;
vim /mnt/test.sh
#!/bin/bash
DATA=`df | awk -F " " '/\/$/{print $5}' | awk -F "%" '{print $1}'`
while ture
do
[ "$DATA" -ge "80" ]&&{
echo your / will full! | mail -s warning root
sleep 1
}
done
sh /mnt/test.sh
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
先操作:
使得分区使用率超过80%
然后:sh /mnt/test.sh
sh test.sh & //执行脚本并打入后台
可以看到用户收到了邮件:

- 1
hu Jun 21 02:11 18/590 "warning"
N 9 root Thu Jun 21 02:11 18/590 "warning"
N 10 root Thu Jun 21 02:11 18/590 "warning"
N 11 root Thu Jun 21 02:11 18/590 "warning"