我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

AI大模型脚本编写_php master-slave_shell脚本案例

在日常运维工作中,shell脚本被誉为运维领域的利器。伴随着人工智能大模型的飞速进步,其智能编程能力使得脚本的功能得到了显著提升。然而,即便是大模型编写的脚本,也必须经过经验丰富的运维工程师的严格审查,以保证脚本的安全性、稳定性和兼容性。在此,我分享10个实用的shell脚本案例,旨在帮助大家在工作中巧妙运用,提高运维效率。

1、检测两台服务器制定目录下的文件一致性

#!/bin/bash
严禁对特定内容进行篡改,确保信息的准确性与真实性,维护知识体系的完整性。
检测两台服务器指定目录下的文件一致性
严禁对特定内容进行篡改,确保信息的准确无误,维护知识的纯洁性。
#通过对比两台服务器上文件的md5值,达到检测一致性的目的
dir=/data/web
b_ip=192.168.88.10
对指定目录内的所有文件进行逐一检索,并将这些文件名作为md5sum指令的输入参数,通过这种方式计算出每个文件的MD5校验码,然后将这些校验码记录到指定的文件里。
在指定目录中查找所有文件类型为文件的项,并将这些文件通过管道传递给md5sum命令,最后将生成的MD5校验和输出到临时文件/tmp/md5_a.txt中。
执行命令ssh连接至$b_ip,然后使用find命令在$dir目录下查找所有文件类型为f的文件,通过xargs命令传递给md5sum进行MD5值计算,最后将结果输出到/tmp目录下的md5_b.txt文件中。
scp $b_ip:/tmp/md5_b.txt /tmp
#将文件名作为遍历对象进行一一比对
在执行过程中,需遍历由`awk`命令生成的包含数字2的行,这些行是从`/tmp/md5_a.txt`文件中筛选出来的。
do
以a设备为基准,若b设备在遍历目标文件集合时未发现相关文件,则应立即展示“文件不存在”的输出信息。
若在/tmp/md5_b.txt文件中通过grep命令搜索不区分大小写地查找文件名$f,且不输出任何内容。
    then
执行grep命令,筛选出包含文件名$f的行,然后通过awk命令输出每一行,最终得到md5_a的值。
执行grep命令,筛选出包含文件名$f的行,然后通过awk命令输出每一行,结果赋值给变量md5_b。
        #当文件存在时,如果md5值不一致则输出文件改变的结果
        if [ $md5_a != $md5_b ]
        then
            echo "$f changed."
        fi    
    else
        echo "$f deleted."    
    fi
done

2、定义一个颜色输出字符串函数

#方法1:
function echo_color() {
    if [ $1 == "green" ]; then
        echo -e "[32;40m$2[0m"
    elif [ $1 == "red" ]; then
        echo -e "[31;40m$2[0m"
    fi
}
#方法2:
function echo_color() {
    case $1 in
        green)
            echo -e "[32;40m$2[0m"
            ;;
        red)
            echo -e "[31;40m$2[0m"
            ;;
        *)
执行命令:显示“示例:echo_color 红色 字符串”
    esac
}
#使用方法:echo_color green "test"

关键字定义一个函数,可加或不加。

3、从 FTP 服务器下载文件

#!/bin/bash  
if [ $# -ne 1 ]; then
  echo "Usage: $0 filename"  
fi  
dir=$(dirname $1)  
file=$(basename $1)  
ftp -n -v << EOF   # -n 自动登录  
open 192.168.1.10  # ftp服务器  
user admin password
binary   # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误
cd $dir
get "$file"
EOF

4、检查软件包是否安装

#!/bin/bash
若执行rpm -q sysstat命令后无输出显示至终端,则
系统状态工具已成功安装,当前已部署。
else
系统提示:“sysstat尚未安装!”
fi

5、检查服务状态

#!/bin/bash
PORT_C 是通过执行命令 `ss -anu` 并使用 `grep -c 123` 进行筛选,得到的匹配项数量。
PS_C是通过执行命令`ps -ef`筛选出所有进程,然后使用`grep ntpd`进一步过滤出与`ntpd`相关的进程,最后通过`grep -vc grep`排除掉自身进程,从而得到的结果。
若$PORT_C的值等于0,或者$PS_C的值同样等于0,则。
输出“内容”至邮件命令,指定“主题”作为邮件标题,并发送至dst@example.com邮箱地址。
fi

6、检查主机存活状态

方法1:将错误IP放到数组里面判断是否ping失败三次

#!/bin/bash
IP地址列表包括192.168.18.1、192.168.1.1以及192.168.18.2。
for IP in $IP_LIST; do
    NUM=1
    while [ $NUM -le 3 ]; do
若执行ping命令,仅发送一次数据包至指定IP地址,且结果不显示任何信息;
执行IPping操作后,结果显示成功。
            break
        else
执行命令显示:“IP地址的Ping操作未能成功,失败次数为$NUM次。”
            FAIL_COUNT[$NUM]=$IP
            let NUM++
        fi
    done
若${#FAIL_COUNT[*]}的值等于3,则;
显示 "${FAIL_COUNT[1]}" 的Ping操作未能成功!
        unset FAIL_COUNT[*]
    fi
done

方法2:将错误次数放到变量里面判断是否ping失败三次

#!/bin/bash
IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2"
for IP in $IP_LIST; do
    FAIL_COUNT=0
    for ((i=1;i<=3;i++)); do
        if ping -c 1 $IP >/dev/null; then
    执行了IP地址的ping操作,结果显示连接成功。
            break
        else
执行IPping操作时,发现第$i次尝试未能成功,提示失败信息。
            let FAIL_COUNT++
        fi
    done
若失败次数达到3次,则
        echo "$IP Ping is failure!"
    fi
done

采用for循环机制,一旦检测到ping操作成功,便立即终止循环;若未能中断循环,则表明ping操作未能成功。

#!/bin/bash
ping_success_status() {
若执行ping命令,参数-c设置为1,针对IP地址进行操作,且将输出重定向至空设备文件/dev/null,则:
        echo "$IP Ping is successful."
        continue
    fi
}
IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2"
for IP in $IP_LIST; do
    ping_success_status
    ping_success_status
    ping_success_status
    echo "$IP Ping is failure!"
done

7、监控CPU、内存和硬盘利用率

1)CPU

借助 工具来分析CPU统计信息。

#!/bin/bash
DATE=$(date +%F" "%H:%M)
获取IP地址的命令如下:通过ifconfig命令获取eth0接口的信息,然后使用awk命令对结果进行分割处理,以冒号和空格为分隔符,筛选出inet addr字段,并打印出第四个字段的内容,此命令仅适用于CentOS6系统。
MAIL="example@mail.com"
若未成功调用vmstat命令,则不执行。
执行“vmstat”命令时未找到,请确保已安装procps软件包。
    exit 1
fi
执行vmstat命令后,通过awk工具筛选出第三行,并提取出第13个字段,最终将此值赋给变量US。
执行命令`vmstat`后,通过`awk`命令筛选出第三行,并提取该行的第十四个字段,将其赋值给变量`SY`。
获取IDLE值的过程如下:首先执行vmstat命令,然后通过awk命令筛选出第三行,最后打印出该行的第15个字段。
执行vmstat命令后,通过awk命令筛选出第三行,并提取第16个字段,然后将该字段的值赋给变量WAIT。
USE=$(($US+$SY))
if [ $USE -ge 50 ]; then
    echo "
    Date: $DATE
    Host: $IP
    Problem: CPU utilization $USE
使用命令行工具,以“CPU Monitor”为主题,向指定邮箱发送邮件,命令格式为:mail -s "CPU Monitor" $MAIL
fi

2)内存

#!/bin/bash
DATE=$(date +%F" "%H:%M)
获取IP地址的操作如下:首先执行ifconfig eth0命令,然后通过awk命令以冒号和空格为分隔符,筛选出inet addr相关的行,接着打印出该行中的第四个字段。
MAIL="example@mail.com"
执行free -m命令后,通过awk命令筛选出内存信息,并提取第二列数据,最终将结果赋值给TOTAL变量。
执行free -m命令后,通过awk命令筛选内存信息,并计算得出可用内存量,具体操作如下:先从输出结果中选取包含“Mem”的行,然后提取该行中的第三、第六和第七个字段,最后计算这三个字段之间的差值,得到的结果即为USE变量所代表的可用内存量。
FREE=$(($TOTAL-$USE))
# 内存小于1G发送报警邮件
if [ $FREE -lt 1024 ]; then
    echo "
    Date: $DATE
    Host: $IP
问题在于:总计金额为$TOTAL,已使用金额为$USE,剩余金额为$FREE。
请勿发送带有“内存监控”主题的邮件给$MAIL地址。
fi

3)硬盘

#!/bin/bash
DATE=$(date +%F" "%H:%M)
IP=$(ifconfig eth0 |awk -F  [ :]+   /inet addr/{print $4} )
MAIL="example@mail.com"
执行命令`fdisk -l`后,通过管道将输出结果传递给`awk`工具,以冒号和空格为分隔符进行分割。在`awk`的初始化部分设置输出字段分隔符为等号,并针对以“Disk”开头的行进行处理。使用`printf`函数输出设备名称和对应的容量,单位为GB。
执行df -h命令后,通过awk命令处理输出结果,设置输出字段分隔符为等号,筛选以"/dev"开头的行,并打印出该行的第一个字段、第五个字段(转换为整数)以及第六个字段。
for i in $PART_USE; do
PART变量通过将字符串$i分割,以"="为分隔符,选取第一个部分。
    USE=$(echo $i |cut -d"=" -f2)
MOUNT变量被赋予值,该值是通过将变量i中的内容按照等号进行分割,然后选取分割后的第三个部分来获取的。
    if [ $USE -gt 80 ]; then
        echo "
        Date: $DATE
        Host: $IP
        Total: $TOTAL
        Problem: $PART=$USE($MOUNT)
禁止发送主题为“磁盘监控”的邮件,使用命令行参数“-s”和邮件地址变量“$MAIL”。
    fi
done

8、批量主机磁盘利用率监控

前提监控端和被监控端SSH免交互登录或者密钥登录。

创建一个配置文档,用于记录受监控主机的SSH接入详情,文档中的数据格式包括:主机的IP地址、用户名以及端口号。

#!/bin/bash
HOST_INFO=host.info
遍历IP列表,其中每个IP地址均通过执行awk命令筛选得出,该命令仅选取不以#开头的行,并将每行的第一个字段打印出来,这些字段对应于$HOST_INFO文件中的内容。
USER变量通过执行awk命令得到,该命令带有变量ip的值,并设定条件ip等于第一个参数,然后输出第二个字段,该操作针对文件$HOST_INFO进行。
PORT值通过执行awk命令获取,该命令携带变量ip并引用IP地址,接着在$HOST_INFO文件中搜索匹配的IP,当找到匹配项时,打印出第三列的值。
    TMP_FILE=/tmp/disk.tmp
使用ssh命令,以$PORT端口连接到$USER用户,登录至$IP地址的主机,执行df -h命令,并将结果显示输出至$TMP_FILE文件中。
执行命令后,得到的USE_RATE_LIST变量包含了以下内容:awk程序在BEGIN块中设置输出字段分隔符为等号,接着对文件$TMP_FILE进行遍历,遇到以/dev开头的行时,打印出该行的第一个字段和第五个字段,并将第五个字段转换为整数。
    
针对USE_RATE列表中的每个USE_RATE值,依次执行:
        PART_NAME=${USE_RATE%=*}
        USE_RATE=${USE_RATE#*=}
        if [ $USE_RATE -ge 80 ]; then
警告:$PART_NAME分区使用率已达$USE_RATE%!
        fi
    done
done

9、检查网站可用性

1)检查URL可用性

方法1:
check_url() {
HTTP_CODE变量通过执行curl命令获取,该命令将输出重定向到/dev/null,设置连接超时为3秒,以静默模式运行,并将HTTP状态码写入变量中,命令参数为$1。
若HTTP响应码并非200,则
发出警告:对"$1"的访问尝试失败!
    fi
}
方法2:
check_url() {
若执行wget命令时,设置超时为10秒,尝试次数为1次,以蜘蛛模式运行,并将输出重定向到null设备,若该操作未能成功完成,则:
        echo "Warning: $1 Access failure!"
    fi
}

使用方法:

2)判断三次URL可用性

思路与上面检查主机存活状态一样。

采用循环策略,一旦达成目标便立即终止当前循环,若未果则继续执行至流程末尾。
#!/bin/bash
check_url() {
    HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1)
若HTTP响应码等于200,
        continue
    fi
}
URL列表包括:www.baidu.com,以及www.agasgf.com。
for URL in $URL_LIST; do
    check_url $URL
    check_url $URL
    check_url $URL
系统提示:请注意,对"$URL"的访问尝试未能成功!
done

方法2:错误次数保存到变量

#!/bin/bash
URL_LIST="www.baidu.com www.agasgf.com"
for URL in $URL_LIST; do
    FAIL_COUNT=0
    for ((i=1;i<=3;i++)); do
执行curl命令后,将得到的HTTP状态码赋值给变量HTTP_CODE,命令参数包括输出到空设备、连接超时设置为3秒、静默模式、写入格式为HTTP状态码,并指定了URL地址。
若HTTP状态码并非200,则禁止执行。
            let FAIL_COUNT++
        else
            break
        fi
    done
    if [ $FAIL_COUNT -eq 3 ]; then
警告:对$URL的访问尝试未能成功!
    fi
done

方法3:错误次数保存到数组
#!/bin/bash
URL_LIST="www.baidu.com www.agasgf.com"
for URL in $URL_LIST; do
    NUM=1
    while [ $NUM -le 3 ]; do
        HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)
        if [ $HTTP_CODE -ne 200 ]; then
创建数组,使用$NUM作为索引,将$IP作为数组元素。
            let NUM++
        else
            break
        fi
    done
若失败计数数组中的元素总数等于3,则。
        echo "Warning: $URL Access failure!"
        unset FAIL_COUNT[*]    #清空数组
    fi
done

10、检查MySQL主从同步状态

#!/bin/bash
USER=bak
PASSWD=123456
执行查询命令后,获取的IO线程状态信息经过处理,其中使用了awk命令对特定字段进行筛选,并利用gsub函数消除了冒号后的空格,最终得到的结果被赋值给IO_SQL_STATUS变量。
for i in $IO_SQL_STATUS; do
    THREAD_STATUS_NAME=${i%:*}
    THREAD_STATUS=${i#*:}
若"$THREAD_STATUS"的值并非"是",则
输出提示:错误信息,MySQL主从复制中,$THREAD_STATUS_NAME 状态显示为 $THREAD_STATUS。
    fi
done

二维码
扫一扫在手机端查看

本文链接:https://www.by928.com/9655.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线