当前位置: 首页 > article >正文

shell脚本运维开发(持续更新...)

1. 编写批量修改扩展名脚本

要求:找到所有源文件扩产名为 txt 的文件,并将源文件扩产名改成 doc 。

#!/bin/bash

for i in $(ls *.txt);
do
    n=${i%.*} # 用取尾的方式去除扩产名
    mv $i $n.doc
done

优化:修改任意扩展名

思路:判断参数是否为两个(原扩展名  新扩展名) >> 判断文件是否存在,若不存在,报错加退出脚本  >> 使用 for 循环找到当前目录所有原扩展名的结尾文件 >> 使用 if 判断 mv 命令是否成功,若成功,输出成功,若失败,输出失败

#!/bin/bash

# 检查输入参数是否为两个
if [ $# -ne 2 ]; then
    echo "用法: $0 <原扩展名> <新扩展名>"
    exit 1
fi

# 提取原扩展名和新扩展名
old_ext=$1
new_ext=$2

# 尝试列出以原扩展名结尾的文件,判断是否存在匹配的文件
ls *."$old_ext" &> /dev/null
if [ $? -ne 0 ]; then
    echo "未找到以.$old_ext 结尾的文件。"
    exit 0
fi

# 遍历当前目录下所有以原扩展名结尾的文件
for file in *."$old_ext"; do
    # 去除原扩展名
    base_name=${file%.*}
    # 构建新的文件名
    new_file=$base_name.$new_ext
    # 尝试重命名文件
    if mv $file $new_file; then
        echo "已将 $file 重命名为 $new_file"
    else
        echo "重命名 $file 失败"
    fi
done

2. 监控服务器磁盘使用率

要求:定期检查服务器硬盘的使用率,当使用率超过某个阈值时,发送警报信息。

#!/bin/bash

# 定义硬盘使用率阈值,单位为百分比
THRESHOLD=80

# 获取根目录(/)的硬盘使用率
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

# 检查硬盘使用率是否超过阈值
if [ $USAGE -gt $THRESHOLD ]; then
    echo "硬盘使用率 $USAGE ,超过阈值80%"
else
    echo "硬盘使用率 $USAGE"
fi

3. 批量重启服务器上的服务

要求: 批量重启服务

#!/bin/bash

# 定义服务
SERVICES=("nginx" "php-fpm" "mysql" "redis")

# 重启服务,若没有重启成功,警告
for i in  "${SERVICES[@]}"; do
    echo "正在重启 $i 服务..."
    systemctl restart $i
    if [ $? -eq 0 ]; then
        echo "$i 服务重启成功"
    else    
        echo "$i 服务重启失败"
        journalctl -u $i --no-pager | tail -n 30 > "/var/log/${i}_restart_error.log"
    fi
done
  • journalctl -u SERVICE --no-pager 
    • 默认情况下,journalctl 会将输出通过分页器(如 less)显示,以便用户可以逐页查看日志。使用 --no-pager 选项后,日志会直接输出到标准输出,而不会使用分页器。
  • for 循环 for i in "${SERVICES[@]}" 里,会依次把 "nginx""php-fpm""mysql" 和 "redis" 赋值给变量 i,这样能确保每个服务名作为一个整体来处理,避免因服务名包含空格等特殊字符而产生问题。

4. 备份mysql数据库

要求:备份数据

#!/bin/bash

# 配置数据库连接信息
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_HOST="localhost"

# 配置备份目录
BACKUP_DIR="/path/to/backup"

# 配置保留备份文件的天数
DAYS_TO_KEEP=7

# 配置要备份的数据库,若要备份所有数据库,将其设置为 all
DATABASES="your_database1 your_database2"

# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"

# 获取当前日期(xx年xx月xx日)
DATE=$(date +%Y%m%d%)

# 检查数据库备份类型
if [ "$DATABASES" = "all" ]; then
    # 备份所有数据库
    BACKUP_FILE="$BACKUP_DIR/all_databases_$DATE.sql.gz"
    mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" --all-databases | gzip > "$BACKUP_FILE"
else
    # 备份指定数据库
    for DB in $DATABASES; do
        BACKUP_FILE="$BACKUP_DIR/$DB_$DATE.sql.gz"
        mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" "$DB" | gzip > "$BACKUP_FILE"
    done
fi

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "数据库备份成功,备份文件存储在:$BACKUP_DIR"
else
    echo "数据库备份失败,请检查数据库连接信息和权限。"
fi

# 清理旧的备份文件
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +$DAYS_TO_KEEP -delete


http://www.kler.cn/a/591742.html

相关文章:

  • DeepSeek + 药物研发:解决药物研发周期长、成本高-降低80%、失败率高-减少40%
  • NO.42十六届蓝桥杯备战|数据结构|算法|时间复杂度|空间复杂度|STL(C++)
  • C++学习之云盘项目nginx
  • 无人机市场观察2025.3.18
  • 计算机网络进化论:从比特流到量子通信的深层解构
  • 使用Koa2快速搭建一个爬虫项目
  • C语言之数据结构:链表(一)
  • Web元件库 ElementUI元件库+后台模板页面(支持Axure9、10、11)
  • Spark 解析_spark.sparkContext.getConf().getAll()
  • Kafka详解——介绍与部署
  • 【Linux】Bash是什么?怎么使用?
  • 森林防火预警广播监控系统:以4G为纽带架构融合智能广播、远程监控、AI智能识别、告警提示、太阳能供电于一体的新一代森林防火预警系统
  • LeetCode 392. 判断子序列 java题解
  • 在 Ubuntu 中配置 NFS 共享服务的完整指南
  • C++ —— 线程同步(互斥锁)
  • OpenCV图像拼接(1)概述
  • 【Vue3+Vite指南】全局引入SCSS文件后出现Undefined mixin?一招解决命名空间陷阱!
  • 机器视觉工程师如何学习C#通讯
  • Flask实时监控:打造智能多设备在线离线检测平台(升级版)
  • 移动版 Edge :插件安装功能全面指南