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

5. 用户添加sudo权限

根据用户文件,给用户添加sudo权限

#!/bin/bash

# 定义存储用户名的 txt 文件路径
USER_FILE="users.txt"
# 定义默认密码
DEFAULT_PASSWD="123456"

# 检查文件是否存在
if [ ! -f "$USER_FILE" ]; then
    echo "用户列表文件 $USER_FILE 不存在,请检查路径。"
    exit 1
fi

# 逐行读取文件中的用户名
while NAME= read -r USERNAME; do
    # 检查用户是否已经存在
    if id "$USERNAME" &>/dev/null; then
        echo "用户 $USERNAME 已经存在,跳过创建步骤。"
    else
        # 创建新用户
        useradd -m "$USERNAME"
        if [ $? -eq 0 ]; then
            echo "用户 $USERNAME 创建成功。"
            # 设置用户密码
            echo "$USERNAME:$DEFAULT_PASSWORD" | chpasswd
            if [ $? -eq 0 ]; then
                echo "用户 $USERNAME 的密码设置为 $DEFAULT_PASSWD 成功。"
            else
                echo "用户 $USERNAME 的密码设置失败。"
            fi
        else
            echo "用户 $USERNAME 创建失败。"
        fi
    fi

    # 检查用户是否已经在 sudo 组中
    if groups "$USERNAME" | grep -q '\bsudo\b'; then
        echo "用户 $USERNAME 已经具有 sudo 权限,跳过添加步骤。"
    else
        # 将用户添加到 sudo 组
        usermod -aG sudo "$USERNAME"
        if [ $? -eq 0 ]; then
            echo "用户 $USERNAME 已被添加到 sudo 组,现在具有 sudo 权限。"
        else
            echo "将用户 $USERNAME 添加到 sudo 组失败。"
        fi
    fi
done < "$USER_FILE"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值