shell编程练习(二)

本文通过三个练习展示了Shell脚本在管理数据库和备份方面的应用。练习1涉及监控主机连接失败并将其加入黑名单;练习2包括创建数据库、表及备份操作;练习3则讲解了如何使用脚本进行数据库备份,根据文件存在情况提供交互式操作选择。

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

练习1.

在/var/log/secure查找连接失败的主机,并统计次数,累计连接失败超过3次,将此主机加入系统黑名单(/etc/hosts.deny)
 

#!/bin/bash

cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort |uniq -c |awk '{print $2"="$1}' >/tmp/blacklist

MAXCOUNT="3"

for i in `cat /tmp/blacklist`
   IP=`echo $i | awk -F= '{print $1}'`
   NUM=`echo &i |awk -F= '{print $2}'`

if [ $NUM -gt $MAXCOUNT ];then
   grep $IP /etc/hosts.deny > /dev/null
   if [ $? -gt 0 ];then
       echo "ssd:$IP" >> /etc/hosts.deny
   fi
fi
done

 

脚本执行结果展示:

 


练习2.

创建数据库harry,natasha,tom,表以及备份数据库

首先安装数据库,并进行数据库的安全初始化(该步骤在此省略,不明白的小伙伴可以看之前的关于mariadb数据库的博客)

 #!/bin/bash
   
   MY_CREATE="mysql -uroot -plee"
   MY_DUMP="mysqldump -uroot -plee"
   
   for ((i=1;i<=3;i++))
   do {
      echo "*********************"
      read -p "请输入你要创建的数据库的名字:" dbname
     $MY_CREATE -e "CREATE DATABASE $dbname;"
 
     for((j=1;j<=3;j++))
     do {
         read -p "请输入你要创建的表的名字:" tbname
         $MY_CREATE -e "USE $dbname;CREATE TABLE $tbname( id int,username varc    har(10) not null );"
     }
     done
 
     $MY_DUMP $dbname >>/mnt/$dbname.sql
     $MY_CREATE -e "SHOW DATABASES;"
     echo "***********************"
  }
  done


  

 

脚本执行结果如下:

 


练习3.

数据库备份,执行script.sh $dbpasswd 备份数据库中所有库到/mnt/mysqldump目录中,备份文件名称为“库名称.sql”,当此文件存在时进入交互模式,询问动作,输入“s”跳过备份,输入“b”,备份“库名称.sql”为“库名称_backup.sql”,输入“0”时,覆盖源文件

#!/bin/bash

MYUSER=root
MYPASS=lee
MYCMD="mysql -u$MYUSER -p$MYPASS"
MYDUMP="mysqldump -u$MYUSER -p$MYPASS"
DBPATH=/mnt/mysqldump/

read -p "请输入登录密码:" passwd

if [ "$passwd" == "$MYPASS" ];then {
     [ ! -d "$DBPATH" ] && mkdir -p $DBPATH
     DB=`$MYCMD -e "SHOW DATABASES;" | sed '1,2d' |egrep -v "mysql|schema"`
     for dbname in $DB
     do {
        if  [ -e "$DBPATH/${dbname}.sql" ];then {
             echo -e "
                   s  跳过备份
                   b  备份"库名称.sql"为"库名称_backup.sql"
                   o  覆盖源文件
             "
             read -p "请输入你的选择:" char
             case $char in
             s|S)
                 ;;
             b|B)
                 $MYDUMP -e $dbname > $DBPATH/${dbname}_backup.sql
                 ;;
             o|O)
                 $MYDUMP -e $dbname > $DBPATH/${dbname}.sql
                 ;;

             esac
        }
        else
            echo "^^^^^^^^^^^^^^^^^^"
            $MYDUMP $dbname > $DBPATH/${dbname}.sql   
        fi
      }
     done
}
else {
   echo "密码错误,请重新输入!!"
   exit
}
fi

 

脚本执行结果如下:

第一次执行脚本时,/mnt/mysqldump目录下没有数据库的备份文件,直接执行备份的步骤

 第二次执行脚本时,已经生成备份文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值