shell中常用的控制语句(上)

本文详细介绍了Shell脚本中for和while循环语句的应用,包括exit、break与continue命令的区别及使用场景。通过实例展示了如何利用这些循环进行批量任务处理和系统监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#########################学习循环语句中的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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值