shell脚本实现一键部署lamp服务及监控和备份

目录

初始化环境

首先编写iplist文件以供脚本进行所测试ip的读取

远程分发

对系统的初始化管理

进行用户的动态增加和删除

实现用户创建之后进行用户删除

实现对远程主机的自动化初始化和用户添加删除

实现对这些指标的自动收集

进行备份

实现软件的自动化部署

实现对数据库有效的备份

监控脚本对这两个服务器进行实时监控

实现master对服务脚本的分发

对两个服务器所产生日志的自动备份

实现整合

case分支语句整合脚本


初始化环境

安装虚拟机master,httpd和mysql,对其基本环境进行配置,配置ip地址并进行连通性测试,测试成功后使用远程工具对虚拟机进行操控。

对连通性测试进行自动化配置,编写shell脚本ping.sh并进行自动化连通性测试。

首先编写iplist文件以供脚本进行所测试ip的读取

如下所示:

#!/bin/bash
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "正在ping $ip 请稍等..."
    ping -c 2 -i 0.5 -W 2 $ip &>/dev/null
    if [ $? -eq 0 ]
        then
            echo "地址$ip是通的"
            echo $ip >>/root/testsh/ok.txt
    else
        echo "地址$ip是不通的"
        echo $ip >>/root/testsh/notok.txt
    fi
done
echo "所有的ip地址已经检测完毕"

执行结果如下:

远程分发

在此基础上,对本地master上的文件希望进行远程分发至httpd和mysql以及执行,编写脚本fenfa.sh以实现该功能。

首先创建fenfa文件夹,将需要进行分发的文件复制装在该文件夹,以便脚本运行时进行访问。

#!/bin/bash
ips=$(cat /root/testsh/iplist)
dir=/root/testsh/fenfa/
files=$(ls /root/testsh/fenfa)
for ip in $ips
do
    for file in $files
    do
        scp ${dir}${file} root@${ip}:/root &>/dev/null
        if [ $? -eq 0 ]
            then
                echo "往${ip}分文件${dir}${file}分发成功..."
        else
            echo "往${ip}分文件${dir}${file}分发失败,请检测网络"
        fi
    done
done

编写完成进行脚本执行结果如下:

对系统的初始化管理

在第一天的进行网络连通和远程分发操作的基础上,希望实现对系统的初始化管理,包括修改本地主机的主机名,关闭主机的selinux服务,隐藏主机的登录信息以及修改主机的dns。编写脚本init.sh以实现这些基本功能,脚本具体如下:

#!/bin/bash
ip=$(ifconfig | grep "192.168.10" | cut -d'n' -f2 | cut -d' ' -f2)
lastip=$(ifconfig | grep "192.168.10" | cut -d'n' -f2 | cut -d' ' -f2 | cut -d"." -f4)
hostname=host${lastip}
hostnamectl set-hostname $hostname
echo "地址为$ip的主机名修改为$hostname"

echo "关闭地址为$ip的主机的selinux"
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

echo "隐藏地址为$ip的主机的登录信息"
echo "欢迎登录该主机" >/etc/issue

echo "配置地址为$ip的主机的DNS为114.114.114.114"
echo "nameserver 114.114.114.114" >/etc/resolv.conf

在对以上脚本进行运行的具体结果如下所示:

脚本使用hostnamectl set-hostname命令将主机的hostname永久性更改,以实现对主机的可靠性标识。

使用setenforce 0命令关闭当前状态的selinux,然后更改/etc/sysconfig/selinux文件进行永久性的selinux服务关闭。替换/etc/issue文件中的信息实现用户登录信息的隐藏。

更改网络配置文件/etc/resolv.conf中的dns项目实现dns的更改。

使用以上操作实现对主机的初始化。

进行用户的动态增加和删除

在初始化完成后希望进行用户的动态增加和删除,编写两个脚本以实现该服务。首先编写一个users.txt文件以供脚本进行读取操作。

Users.txt文件如下:

#!/bin/bash
users=$(cat /root/testsh/users.txt)
for user in $users
do
    id $user &>/dev/null
    if [ $? -eq 0 ]
        then
            echo "用户$user已存在,不用添加了"
            continue
    else
        useradd $user &>/dev/null
        if [ $? -eq 0 ]
            then
                echo "${user}123" | passwd --stdin $user &>/dev/null
                chage -d 0 $user &>/dev/null
                echo "用户$user增加成功"
             else
                echo "用户$user增加失败"
        fi
    fi
done

查看文件users.txt中的添加用户是否已经存在,存在则返回用户存在信息,不存在则创建之后返回创建成功或者失败信息,所创建的用户密码为用户名加上数字123。

脚本执行结果如下所示:

实现用户创建之后进行用户删除

实现用户创建之后进行用户删除脚本userdel.sh编写,同样需要编写nousers.txt文件使脚本读取,实现对某些用户的删除。

nousers.txt具体内容如下:

#!/bin/bash
users=$(cat /root/testsh/nousers.txt)
for user in $users
do
    id $user &>/dev/null
    if [ $? -eq 0 ]
        then
            userdel -r $user &>/dev/null
            if [ $? -eq 0 ]
                then
                    echo "用户$user删除成功"
                else
                echo "用户$user删除失败"
            fi
     else
        echo "用户$user不存在,请检查"
     fi

done

查看文件nousers.txt中需要删除的用户,查看该用户是否存在,不存在返回不存在信息,反之则进行userdel删除用户操作,执行完毕后返回成功或者失败信息。

执行脚本后结果如下:

自此实现本地用户的自动化创建和删除。

实现对远程主机的自动化初始化和用户添加删除

在此基础上还需要实现对远程主机的自动化初始化和用户添加删除操作,将今天的本地主机的操作脚本与昨天的远程分发脚本相结合,实现对远程主机的相同操作。

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在系统初始化"
    ssh root@${ip} chmod a+x /root/init.sh
    ssh root@${ip} sh /root/init.sh
done

执行结果如下:

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在增加用户"
    ssh root@${ip} mkdir /root/testsh &>/dev/null
    ssh root@${ip} cp /root/users.txt /root/testsh
    ssh root@${ip} chmod a+x /root/useradd.sh
    ssh root@${ip} sh /root/useradd.sh
done

执行结果如下:

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在删除用户"
    ssh root@${ip} mkdir /root/testsh &>/dev/null
    ssh root@${ip} cp /root/nousers.txt /root/testsh
    ssh root@${ip} chmod a+x /root/userdel.sh
    ssh root@${ip} sh /root/userdel.sh
done

执行结果如下:

远程操作均为将本地脚本添加到fenfa目录并运行fenfa.sh进行远程分发,再给脚本添加上可执行权限,最后执行实现。

实现对这些指标的自动收集

在系统运行过程中,有许多指标,希望实现对这些指标的自动收集。

#!/bin/bash
hostname=${hostname}
echo "以下是$hostname的系统数据"
#进程数
ps=$(ps aux | wc -l)
if [ $ps -gt 200 ]
    then
        echo "进程数为$ps,大于200,多留意"
else
    echo "进程数为$ps,正常"
fi
#内存占用率
memused=$(sar -r |grep "平均时间" | awk '{print $4}' | cut -d '.' -f1)
if [ $memused -gt 75 ]
    then
        echo "内存占用率过高,为${memused}%"
else
    echo "内存占用率正常,为${memused}%"
fi
#cpu占用率
cpuidle=$(sar -u | grep "平均时间" | awk '{print $8}' | cut -d '.' -f1)
cpuused=$((100-$cpuidle))
if [ $cpuused -gt 75 ]
    then
        echo "cpu占用率过高,为${cpuused}%"
else
    echo "cpu占用率正常"
fi
#用户数
users=$(who | wc -l)
if [ $users -gt 20 ]
    then
        echo "用户数过多,为$users"
else
    echo "用户数正常"
fi
#文件系统
rootused=$(df -hT | grep "xfs" | grep "root"  | awk '{print $6}' | cut -d'%' -f1)
homeused=$(df -hT | grep "xfs" | grep "home"  | awk '{print $6}' | cut -d'%' -f1)
bootused=$(df -hT | grep "xfs" | grep "boot"  | awk '{print $6}' | cut -d'%' -f1)
totalused=$(($rootused+$homeused+$bootused))
if [ $totalused -gt 80 ]
    then
        echo "文件系统占用太高,为${totalused}%"
else
    echo "文件系统占用正常,为${totalused}%"
fi
#网络流量
netflow=$(sar -n DEV | grep "平均时间" | grep "ens33" | awk '{print $5,$6}')
echo "网卡ens33的平均速率和发送速率为$netflow,单位为k/s"

脚本执行结果如下:

系统数据主要有以下组成:进程数,内存占用率,CPU占用率,文件系统以及网卡的速率。

ps aux | wc -l命令输出进程数,判断是否小于200,大于则给予提示并输出,不大于则只输出进程数;

sar -r |grep "平均时间" | awk '{print $4}' | cut -d '.' -f1命令输出内存的占用率,同样的操作判断是否大于75,大于则给予提示并输出,不大于正常输出;

sar -u | grep "平均时间" | awk '{print $8}' | cut -d '.' -f1命令相同的操作输出cpu的占用率;

who | wc -l命令判断系统中的用户数,判断是否大于20,进行同样的提示方法;

df -hT | grep "xfs"分别输出root,home以及boot的内存占用率,将三个数值相加输出总的内存占用率,判断是否大于80,80以上提示占用过高,以下则正常;

sar -n DEV命令查询ens33的平均速率和发送速率,打印输出并注释单位。

以上即该脚本中所有的指标监测功能,shell脚本实现了对系统这些常用指标的快捷收集,方便了管理员的管理。

将该脚本分发到远程主机并进行远程主机的指标收集:

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在进行系统指标监控..."
    ssh root@${ip} chmod a+x /root/system.sh
    ssh root@${ip} sh /root/system.sh
done

执行结果如下:

进行备份

在对服务器进行操作的同时通常需要进行备份操作,编写脚本实现备份的自动化

#!/bin/bash
hostname=${hostname}
echo "主机$hostname正在做全量备份,请稍后..."
backup_time=$(date +%Y_%m_%d_%H)
weekday=$(date +%w)
if [ $weekday -eq 5 ]
    then
        tar -cvjpf /root/etc_backup_${backup_time}.tar.bz2 /etc --exclude /etc/abrt --exclude /etc/aliases.db &>/dev/null
        if [ $? -eq 0 ]
            then
                size=$(du -sh /root/etc_backup_${backup_time}.tar.bz2)
                echo "备份成功,备份文件为/root/etc_backup_${backup_time}.tar.bz2,大小为$size"
        else
            echo "备份不成功"
        fi
else
    echo "没有到做全量备份的时间,不需要备份"
fi

执行结果如下:

对系统中/etc目录进行备份,除去该目录里的abrt以及aliases.db文件,tar -cvjpf命令实现该文档的tar工具备份。date +%Y_%m_%d_%H命令实现对当前时间日期的输出,以date +%w命令判断当前是周几,判断其值是否为5,是则备份,否则提示,实现指定的周五时期备份的需求。最后{backup_time}.tar.bz2命名文件实现对文件备份日期的可视化。

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在进行备份..."
    ssh root@${ip} chmod a+x /root/backup.sh
    ssh root@${ip} sh /root/backup.sh
done

执行结果如下:

实现软件的自动化部署

最后需要实现软件的自动化部署,实现对远程主机httpd和mysql的服务部署,本地编写install.sh脚本分发至两台主机。

#!/bin/bash
ip=$(ifconfig | grep "192.168.10" | awk '{print $2}')
if [ $ip == "192.168.10.2" ]
then
echo "在主机$ip上安装httpd服务,请稍后..."
yum list &>/dev/null
if [ $? -eq 0 ]
then
yum -y install httpd &>/dev/null
echo "htppd软件安装完毕,或者已安装"
sed -i 's/#ServerName www.example.com:80/ServerName www.longdong.com/g' /etc/httpd/conf/httpd.conf
systemctl restart httpd &>/dev/null
systemctl enable httpd &>/dev/null
netstat -antulp | grep :80 &>/dev/null
if [ $? -eq 0 ]
then
echo "httpd服务已经启动成功"
echo "www.longdong.com" >/var/www/html/index.html
else
echo "httpd服务没有启动成功,请检查..."
fi
else
echo "yum源不可用"
fi
elif [ $ip == "192.168.10.3" ]
then
echo "主机$ip上安装mariadb服务..."
yum list &>/dev/null
if [ $? -eq 0 ]
then
yum -y install mariadb-server.x86_64 &>/dev/null
echo "mariadb软件安装完毕,或者已安装"
systemctl restart mariadb.service &>/dev/null
systemctl enable mariadb.service &>/dev/null
netstat -antulp | grep :3306 &>/dev/null
if [ $? -eq 0 ]
then
echo "mariadb服务已经启动成功"
else
echo "mariadb服务没有启动成功,请检查..."
fi

else
echo "yum源不可用"
fi
else
echo "不可安装"
fi
远程分发脚本如下所示:
#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
echo "主机${ip}正在进行软件安装"
ssh root@${ip} chmod a+x /root/install.sh
ssh root@${ip} sh /root/install.sh
done

执行结果如下:

ifconfig命令打印当前主机的IP地址,判断是否是192.168.10.2(httpd)或者192.168.10.3(mysql),是则安装相应的服务,不是则打印输出错误信息。在安装服务之后进行对应服务的启动以及开机自启,再用netstat -antulp过滤相应端口查看相应服务是否启动成功,打印输出相应的信息,如果相应的服务未被安装则打印输出相应服务yum源不可用的提示指令。脚本执行成功则将httpd以及mariadb服务安装到相应的主机。

对于环境中的mysql服务器,我们希望它不会因为一些环境的变化而产生较大的变化,为实现这一目标就需要管理员进行对数据库服务器中的数据库做必要的备份,以实现在某些重大事故中可以有效地挽回损失。

实现对数据库有效的备份

在本次脚本编写中希望实现对数据库有效的备份,因此设计对其在周一进行全量备份,而其他时间去做在此基础上的增量备份。

#!/bin/bash
ip=$(ifconfig | grep "192.168.10" | awk '{print $2}')
weekday=$(date +%w)
if [ $ip == "192.168.10.3" ] && [ $weekday -eq 1 ]
    then
        echo "主机$ip 正在进行数据库的全量备份,请稍后..."
        mkdir /root/mybackup &>/dev/null
        #全量备份
        backupfile=mybackup_$(date +%Y_%m_%d).sql
        mysqldump -uroot -p123456 --all-databases -R>/root/mybackup/$backupfile
        if [ $? -eq 0 ]
            then
                echo "主机$ip 数据库全量备份成功"
        else
            echo "主机$ip 数据库全量备份不成功"
        fi
elif [ $ip == "192.168.10.3" ]
    then
        #增量备份
        echo "主机$ip 正在进行增量备份,请稍后..."
        tar -jcvf /root/mybackup/mysql_bin_$(date +%Y_%m_%d).tar.bz2 /var/lib/mysql/mysql-bin.* &>/dev/null
        if [ $? -eq 0 ]
           then
                echo "主机$ip 进行数据库增量备份成功"
        else
            echo "主机$ip 进行数据库增量备份不成功"
        fi
else
    echo "$ip 不是数据库主机,无需备份!!!"
fi

基本功能如上所述,实现不同时间的全量与增量备份,实现过程为首先使用ifconfig命令寻找数据库服务器所对应的主机ip,是该ip则进行备份,不是则提示不是该服务器;创建备份文件目录/root/mybackup储存备份的文件;判断日期是否为周一,是则用mysqldump命令进行数据库的全量备份,并命名为有时间标识的数据库文件储存在备份目录;备份完成后输出提示信息。判断不是周一的话同样的操作进行增量备份,将数据库文件做tar包压缩并保存在备份目录。根据该功能完成对数据库的备份操作,基本实现对数据库备份功能的配置。当然,相同的需要master主机来进行脚本的分发操作,实现脚本farmybackup.sh有如下:

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在进行数据库备份..."
    ssh root@${ip} chmod a+x /root/mybackup.sh
    ssh root@${ip} sh /root/mybackup.sh
done

自此可以实现远程的文件分发至数据库服务器,并在数据库服务器执行返回执行结果。脚本具体执行结果有如下:

监控脚本对这两个服务器进行实时监控

在实现对httpd和mysql服务器对应服务安装之后,我们还在希望对其具体服务的监控,以保证该服务在该服务器上可以有效地运行。为此需要具体服务监控脚本对这两个服务器进行实时监控。

具体实现脚本service.sh有如下:

#!/bin/bash
ip=$(ifconfig | grep "192.168.10" | awk '{print $2}' )
if [ $ip == "192.168.10.2" ]
    then
        echo "正在监控$ip的httpd进程情况,请稍等..."
        httpd_num=$(pgrep -l httpd | wc -l)
        if [ $httpd_num -eq 5 ]
            then
                echo "httpd的进程数量为$httpd_num,过高,请注意..."
                echo "httpd的进程数量为$httpd_num,过高,请注意..." | mail -s "httpd alert" root@localhost
                systemctl restart httpd &>/dev/null
         fi
        echo "正在监控$ip的httpd的访问情况..."
        cat /var/log/httpd/access_log | awk '{print $1, $4, $9}' | sed 's/\[//g'  >/var/log/httpd/log.txt
        cat /var/log/httpd/log.txt | uniq -c | sort -r | head -10 >/var/log/httpd/danger.txt
        cat /var/log/httpd/danger.txt | mail -s "DDOS alert" root@localhost
        max_access=$(cat /var/log/httpd/danger.txt | head -1 | awk '{print $1}')
        if [ $max_access -gt 4 ]
            then
                echo "有DDOS,请自卫..."
                echo "有DDOS,请自卫..." | mail -s "DDOS DDOS DDOS" root@localhost
        fi
elif [ $ip == "192.168.10.3" ]
    then
        echo "正在进行$ip数据库监控"
        netstat -antulp | grep :3306 &>/dev/null
        if [ $? -eq 0 ]
        then
            echo "mariadb工作正常"
        else
            systemctl restart mariadb
                if [ $? -eq 0 ]
                    then
                        echo "mariadb重启成功"
                fi
        fi
        conn=$(mysqladmin -uroot -p123456 status | awk '{print $4}')
        if [ $conn -gt 20 ]
            then
                echo "mariadb连接数太多了,为$conn"
                echo "mariadb连接数太多了,为$conn" | mail -s "mariadb" root@localhost
        else
            echo "mariadb连接数正常"
        fi
else
    echo "$ip不是监控主机,不需要监控"
fi

在本环境中有两个服务器分别运行httpd以及mariadb服务,需要判断具体服务器的服务,还是用ifconfig 过滤出具体的ip地址,判断是否符合httpd服务器(192.168.10.2)或者mysql服务器(192.168.10.3),符合则进行监控操作,反之给予信息。

然后判断ip,对httpd服务器需要监测其进程情况,以pgrep -l httpd | wc -l将所运行的进程打印出来,判断其是否大于峰值,大于则给予提示输出当前进程数,并以httpd alert为题为本地服务器发送邮件通知。再者需要对其访问情况进行监测,cat /var/log/httpd/access_log | awk '{print $1, $4, $9}' | sed 's/\[//g'命令实现对htppd访问情况的过滤并保存输出信息到/var/log/httpd/log.txt文件,cat /var/log/httpd/log.txt | uniq -c | sort -r | head -10 则是将过滤的信息项前十项输出到同目录下的danger.txt,将该文件地信息命名为DDOS alert发送给本地服务器,并在该文件中判断访问次数是否超过峰值,超过则提示检查系统是否被攻击,并发送本地邮件提醒管理员。

判断ip,对mysql服务器的服务状态进行监测,netstat命令过滤出对应端口3306的信息,判断数据是否正常运行,非运行状态则对数据库进行重启服务。再者对数据库的连接情况进行监测,mysqladmin命令判断连接数量,如果大于峰值则提示输出并向数据库服务器本地发送邮件mariadb提示管理员管理连接。

实现master对服务脚本的分发

在此服务基础上实现master对服务脚本的分发脚本farservice.sh如下:

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在进行服务监控"
    ssh root@${ip} chmod a+x /root/service.sh
    ssh root@${ip} sh /root/service.sh
done

在两个脚本的协助下实现对两个服务的监控,结果如下:

对两个服务器所产生日志的自动备份

最后希望实现对两个服务器所产生日志的自动备份,编写脚本logbackup.sh实现该基本操作,具体代码如下:

#!/bin/bash
ip=$(ifconfig | grep "192.168.10" | awk '{print  $2}')
backup_time=$(date +%Y_%m_%d)
if [ $ip == "192.168.10.2" ]
    then
        echo "正在进行主机$ip日志备份,请稍后..."
        if [ ! -e /logbackup/httpd/httpd_log_$backup_time.tar.bz2 ]
            then
            tar -cjvf /logbackup/httpd/httpd_log_$backup_time.tar.bz2 /var/log/messages /var/log/secure /var/log/httpd/ &>/dev/null
            if [ $? -eq 0 ]
                then
                    echo "主机$ip日志备份成功"
            else
                echo "主机$ip日志备份不成功,请检查"
            fi
        else
            echo "主机$ip已经进行过日志备份"
        fi
elif [ $ip == "192.168.10.3" ]
    then
        echo "正在进行主机$ip日志备份,请稍后..."
        if [ ! -e /logbackup/mariadb/mariadb_log_$backup_time.tar.bz2 ]
           then
            tar -jcvf /logbackup/mariadb/mariadb_log_$backup_time.tar.bz2 /var/log/messages /var/log/secure /var/lib/mysql/mysql-bin.* &>/dev/null
            if [ $? -eq 0 ]
                then
                echo "主机$ip日志备份成功"
            else
                 echo "主机$ip日志备份不成功,请检查"
            fi
        else
            echo "主机$ip已经进行过日志备份"
        fi
else
    echo "主机$ip不是目标主机,不需要进行日志备份"
fi

跟上面同样的操作首先判断ip地址和日期。

对httpd服务器判断有没有今日份备份,备份过了则提示信息,没有则用tar命令创建一个备份文件包含备份具体日期的tar包,里面包含日志文件目录/var/log下的messages,secure ,httpd文件,打包完成之后输出成功与否的信息。

对mysql服务器则是备份日志文件目录/var/log下的messages,secure 和mysql-bin开头的日志文件,操作方式与httpd相似。

如果判断ip地址为非httpd服务器或者mysql服务器的ip,则提示信息表示无需备份。

最后让本地master主机进行脚本分发,分发脚本如下:

#!/bin/bash
sh /root/testsh/fenfa.sh
ips=$(cat /root/testsh/iplist)
for ip in $ips
do
    echo "主机${ip}正在进行日志备份"
    ssh root@${ip} chmod a+x /root/logbackup.sh
    ssh root@${ip} sh /root/logbackup.sh
done

至此已经可以实现对服务日志的自动备份,具体执行结果如下:

实现整合

在前几天的学习中,对shell脚本编程实现服务控制以及远程管理各项功能有了一定了解和实践。对于前面的脚本需要实现选择性执行,因此需要进行编写一个整合脚本对前面的脚本进行梳理和贯通。在对项目整合之前对其功能进行分析,需要使用选择性语句进行脚本的选择执行,而选择性语句有if-else语句和case分支语句。故编写两种脚本实现整合。

#!/bin/bash
while [ True ]
do
echo "请选择要完成的功能,q退出:
    1--检查网络连通性
    2--文件自动分发
    3--批量用户增加
    4--批量用户删除
    5--服务器初始化
    6--系统指标收集
    7--系统自动备份
    8--自动部署
    9--数据库备份
    10--服务监控
    11--日志自动备份"
read -p "请输入: " answer
if [ $answer == 'q' ]
    then
        break
fi
if [ $answer -eq 1 ]
then
    sh /root/testsh/ping.sh
elif [ $answer -eq 2 ]
then
    sh /root/testsh/fenfa.sh
elif [ $answer -eq 3 ]
then
    sh /root/testsh/faruseradd.sh
elif [ $answer -eq 4 ]
then
    sh /root/testsh/faruserdel.sh
elif [ $answer -eq 5 ]
then
    sh /root/testsh/farinit.sh
elif [ $answer -eq 6 ]
then
    sh /root/testsh/farsystem.sh
elif [ $answer -eq 7 ]
then
    sh /root/testsh/farbackup.sh
elif [ $answer -eq 8 ]
then
    sh /root/testsh/farinstall.sh
elif [ $answer -eq 9 ]
then
    sh /root/testsh/farmybackup.sh
elif [ $answer -eq 10 ]
then
    sh /root/testsh/farservice.sh
elif [ $answer -eq 11 ]
then
    sh /root/testsh/farlogbackup.sh
else
    echo "未知功能选项,请重新输入"
fi
done

脚本用一个while循环语句进行周期性执行。首先用echo语句打印输出可以输如的编号,供脚本使用者选择输入。然后先用一个if语句判断输入内容是否为退出选项,是则break退出循环,反之则用用if-else语句判断输入内容,根据输入内容执行相应的脚本,完成相应的任务。

脚本执行结果如下:

case分支语句整合脚本

第二种case分支语句整合脚本main-v2.sh如下所示:

#!/bin/bash
while [ True ]
do
echo "请选择要完成的功能,q退出:
    1--检查网络连通性
    2--文件自动分发
    3--批量用户增加
    4--批量用户删除
    5--服务器初始化
    6--系统指标收集
    7--系统自动备份
    8--自动部署
    9--数据库备份
    10--服务监控
    11--日志自动备份"
read -p "请输入: " answer
if [ $answer == 'q' ]
then break
fi
case $answer  in
1)
sh /root/testsh/ping.sh
2)
sh /root/testsh/fenfa.sh
;;
3)
sh /root/testsh/faruseradd.sh
;;
4)
sh /root/testsh/faruserdel.sh
;;
5)
sh /root/testsh/farinit.sh
;;
6)
sh /root/testsh/farsystem.sh
;;
7)
sh /root/testsh/farbackup.sh
;;
8)
sh /root/testsh/farinstall.sh
;;
9)
sh /root/testsh/farmybackup.sh
;;
10)
sh /root/testsh/farservice.sh
;;
11)
sh /root/testsh/farlogbackup.sh
;;
esac
done

与v1一样,脚本用一个while循环语句进行周期性执行。首先用echo语句打印输出可以输如的编号,供脚本使用者选择输入。然后先用一个if语句判断输入内容是否为退出选项,是则break退出循环,不是则判断输入的内容,执行相应的case语句对应脚本,执行相关任务。

输出结果如下所示:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的示例脚本,可以使用sed命令更改配置文件中的IP地址和其他参数来部署DNS服务器和PXE服务器。 ```bash #!/bin/bash # 安装所需软件 apt-get update apt-get install -y isc-dhcp-server dnsmasq # 配置DNS服务器 sed -i 's/#listen-on port 53/listen-on port 53/' /etc/bind/named.conf.options sed -i 's/#allow-query/allow-query/' /etc/bind/named.conf.options sed -i 's/#forwarders {/forwarders {/' /etc/bind/named.conf.options sed -i 's/#\t0.0.0.0;/\t8.8.8.8;/g' /etc/bind/named.conf.options sed -i 's/#\t0.0.0.0;/\t8.8.4.4;/g' /etc/bind/named.conf.options sed -i 's/#};/};/' /etc/bind/named.conf.options # 配置PXE服务器 sed -i 's/#dhcp-range=/dhcp-range=/' /etc/dnsmasq.conf sed -i 's/#dhcp-boot=/dhcp-boot=/' /etc/dnsmasq.conf sed -i 's/#pxe-service=X86PC/pxe-service=X86PC/' /etc/dnsmasq.conf sed -i 's/#pxe-prompt/pxe-prompt/' /etc/dnsmasq.conf sed -i 's/#enable-tftp/enable-tftp/' /etc/dnsmasq.conf sed -i 's/#tftp-root/tftp-root/' /etc/dnsmasq.conf # 启动服务 systemctl restart isc-dhcp-server systemctl restart dnsmasq ``` 此脚本假设您已经安装了必要的软件包,如`isc-dhcp-server`和`dnsmasq`。在此示例中,我们使用sed命令来修改DNS和PXE服务器的配置文件,以使用正确的IP地址和其他参数。最后,我们重启了两个服务,以使更改生效。 请注意,此脚本并不完整,并且可能需要根据您的环境进行更改。此外,您可能需要根据您的网络设置和服务器配置文件进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

muzilee_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值