脚本练习合集
侧边栏壁纸
  • 累计撰写 18 篇文章
  • 累计收到 3 条评论

脚本练习合集

无冕の神
2026-02-08 / 0 评论 / 2 阅读 / 正在检测是否收录...

开机显示系统信息脚本

#!/bin/bash
yum install -y net-tools &> /dev/null
wangka=`ip a | grep ens | head -1 | cut -d: -f2`
System=$(hostnamectl | grep System | awk '{print $3,$4,$5}')
Kernel=$(hostnamectl | grep Kernel | awk -F: '{print $2}')
Virtualization=$(hostnamectl | grep Virtualization| awk '{print $2}')
Statichostname=$(hostnamectl | grep Static|awk -F: '{print $2}')
Ens32=$(ifconfig $wangka | awk 'NR==2 {print $2}')
Lo=$(ifconfig lo | awk 'NR==2 {print $2}')
NetworkIp=$(curl -s icanhazip.com)
echo "当前系统版本是:$System"
echo "当前系统内核是:$Kernel"
echo "当前虚拟平台是:$Virtualization"
echo "当前主机名是:$Statichostname"
echo "当前网卡$wangka的地址是:$Ens32"
echo "当前lo接口的地址是:$Lo"
echo "当前公网地址是:$NetworkIp"

监控httpd进程
1.每隔10s监控httpd的进程数,若进程数大于等于50,则自动重启Apache服务,并检测服务是否重启成功

2.若未成功则需要再次启动,若重启5次依旧没有成功,则向管理员发送告警邮件(使用echo输出已发送即可),并退出检测

3.如果启动成功,则等待1分钟后再次检测httpd进程数,若进程数正常,则恢复正常检测(10s一次),否则放弃重启并向管理员发送告警邮件,并退出检测

#!/bin/bash
function check_httpd_process_number(){
process_num=$(ps -aux | grep httpd | wc -l)

if [[ $process_num -gt 50 ]]
then
        systemctl restart httpd &> /dev/null
        systemctl status httpd &> /dev/null
        if [[ $? -ne 0 ]]
        then
                num_restart_httpd=0
                while true;do
                        let num_restart_httpd++
                        systemctl restart httpd &> /dev/null
                        systemctl status httpd &> /dev/null
                        [[ $? -eq 0 ]]  && break
                        [[ $num_restart_httpd -eq 6  ]] && break
                done
        fi
        systemctl status httpd &> /dev/null
        [[ $? -ne 0 ]] && echo "apache未正常重启,已发送邮件给管理员" && return 1
        sleep 60
        process_num=$(ps -ef | grep httpd| wc -l)
        if [[ $process_num -gt 50 ]]
        then
                echo "apache经过重启进程数依然大于50"
                return 1
        else
                return 0
        fi
else
    echo "进程数小于50"
    sleep 3
    return 0
fi
}
while true;do
        check_httpd_process_number
        [[ $? -eq 1 ]] && exit
done

统计文件
统计两个目录下的相同文件,以及不同文件

#!/bin/bash
# server1的文件在/test/目录中,server2的文件在/root/demo中,通过md5值来判断文件一致性,最终输出相同文件以及各自的不同文件
#定义两个数组的索引
point1=0
point2=0
echo "/test/的文件:"
# 将server1上的文件的散列值记录到数组当中
for i in `ls /root/demo`;do
    md5=`md5sum /root/demo/$i | awk '{print $1}'`
    arrar1[$point1]=$md5:$i
    echo ${arrar1[$point1]}
    let point1++
done
echo "/root/demo的文件:"
# 将server2上的文件的散列值记录到数组当中
for i in `ls /test`;do
    md5=`md5sum /test/$i | awk '{print $1}'`
    arrar2[$point2]=$md5:$i
    echo ${arrar2[$point2]}
    let point2++
done

# 找出相同文件以及server1上的独立文件,server1的每个文件都和server2上进行比较
echo "-------------------------------"
for i in ${arrar1[@]};do
    for j in ${arrar2[@]};do
        temp_flag=0     #定义一个标志位,表示没找到相同的文件
        server1_md5=`echo $i | awk -F: '{print $1}'`
        server2_md5=`echo $j | awk -F: '{print $1}'`
        server1_filename=`echo $i | awk -F: '{print $2}'`
        server2_filename=`echo $j | awk -F: '{print $2}'`
        if [ $server1_md5 == $server2_md5 ];then
            echo -e "两边共同文件\t\t\t$server1_filename"
            temp_flag=1    #找到了相同的文件
            break
        fi
    done
    if [ $temp_flag -eq 0 ];then
        echo -e "server1不同文件\t\t\t$i"
    fi
done

# 找出server2上的独立文件
for i in ${arrar2[@]};do
    for j in ${arrar1[@]};do
        temp_flag=0
        server1_md5=`echo $i | awk -F: '{print $1}'`
        server2_md5=`echo $j | awk -F: '{print $1}'`
        server1_filename=`echo $i | awk -F: '{print $2}'`
        server2_filename=`echo $j | awk -F: '{print $2}'`
        if [ $server1_md5 == $server2_md5 ];then
            temp_flag=1
            break
        fi
    done
    if [ $temp_flag -eq 0 ];then
        echo -e "server2不同文件\t\t\t$i"
    fi
done
1

评论 (0)

取消