shell交互式基础环境设置(4)

优化了一下脚本结构
新增以下功能:
1.软件自定义管理
2.判断用户是否存在
3.日志文件管理

#!/bin/bash

# 检查是否以root用户运行脚本
check_root() {
    if [[ $EUID -ne 0 ]]; then
        echo "此脚本需要以root权限运行"
        exit 1
    fi
}

# 配置YUM源
config_yum_source() {
    yum_status=$(yum repolist | grep "CentOS-7 - Base" | awk '{print $7}' | sed 's/,//')
    if [ $yum_status -le 0 ]; then
        ALIYUN_REPO_URL="https://mirrors.aliyun.com/repo/Centos-7.repo"
        read -p "是否配置ali YUM 源[y/n]: " ali
        case $ali in
            [Yy]* )
                echo "开始配置阿里yum源"
                if [ -f /etc/yum.repos.d/CentOS-Base.repo ]; then
                    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && echo "开始备份原有CentOS源到CentOS-Base.repo.backup"
                fi
                curl -o /etc/yum.repos.d/CentOS-Base.repo $ALIYUN_REPO_URL && echo "阿里云YUM源已安装。" || echo "配置阿里云YUM源失败"
                yum clean all && yum makecache
                ;;
            [Nn]* )
                echo "用户取消配置"
                ;;
            * )
                echo "无效的操作"
                ;;
        esac
    else
        echo "YUM源配置正常"
    fi
}

# 查看远程IP连接
view_remote_ip() {
    netstat -atn | awk '{print $5}' | awk '{print $1}' | sort -nr | uniq -c
}

# 查看可登录账户
view_login_accounts() {
    grep "bash$" /etc/passwd
}

# 查看系统信息
view_system_info() {
    KERNEL_DIR="/etc/redhat-release"
    CPU_DIR="/proc/cpuinfo"
    SYSTEM_DATE=$(/usr/bin/date)
    SYSTEM_VERSION=$(cat ${KERNEL_DIR})
    SYSTEM_CPU=$(cat ${CPU_DIR} | grep 'model name' | head -1 | awk -F: '{print $2}' | sed 's#^[ \t]*##g')
    SYSTEM_CPU_NUMS=$(cat ${CPU_DIR} | grep 'model name' -c)
    SYSTEM_KERNEL=$(uname -a | awk '{print $3}')
    SYSTEM_IPADDR=$(hostname -I | awk '{print $1}')
    SYSTEM_HOSTNANE=$(hostname)

    echo "操作系统名称: ${SYSTEM_HOSTNANE}"
    echo "服务器IP地址: ${SYSTEM_IPADDR}"
    echo "操作系统版本: ${SYSTEM_VERSION}"
    echo "系统内核版本: ${SYSTEM_KERNEL}"
    echo "处理器的型号: ${SYSTEM_CPU}"
    echo "处理器的核数: ${SYSTEM_CPU_NUMS}"
    echo "系统当前时间: ${SYSTEM_DATE}"
}


# 监控系统资源
monitor_system_resources() {
    # 获取根分区的使用率
    usage_partition=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)

    # 获取系统负载
    load_average=$(uptime | awk -F"load average:" '{print $2}')

    # 获取内存使用率
    usage_free=$(free | awk 'NR==2 {print $3/$2*100.0}' | cut -d'.' -f1)

    # 编写判断语句
    if [ "$usage_partition" -ge 90 ] || [ "$usage_free" -ge 70 ]; then
        # 邮件收件人
        recipient="343590279@qq.com"
        # 邮件主题
        subject="告警:系统资源告警 - System Resource Alert"
        # 邮件正文
        body=$( cat <<EOF
告警:系统资源告警:

根分区使用率: $usage_partition%
系统负载: $load_average
内存使用率: $usage_free%
请及时处理!
EOF
        )

        # 发送邮件
        echo "$body" | mail -s "$subject" "$recipient"
    fi

    echo "系统资源监控完成"
    echo "根分区使用率: $usage_partition%"
    echo "系统负载: $load_average"
    echo "内存使用率: $usage_free%"
}

# 判断用户是否存在
check_user_exist() {
    read -p "请输入用户名: " username
    id "$username" &>/dev/null
    if [ $? -eq 0 ]; then 
        echo "用户 $username 存在。"
    else
        echo "用户 $username 不存在。"
        read -p "是否需要创建该用户[y/n]: " user
        case $user in
            [Yy]* )
                useradd $username
                echo '123456' | passwd --stdin $username
                ;;
            [Nn]* )
                echo "取消"
                ;;
            * ) 
                echo "无效的输入"
                ;;
            esac
    fi
}


# 检查任意软件
install_software() {
    # 检查 是否已安装任意软件
    rpm -qa | grep $1 &>/dev/null
    if [ $? -ne 0 ]; then
        read -p "$1 软件包未安装,是否开始安装[y/n]: " software
        case $software in
            [Yy]* )
                echo "开始安装 $1 软件包..."
                yum install -y $1
                # 设置 vsftpd 开机启动
                systemctl enable $1.service
                # 启动 vsftpd 服务
                systemctl start $1.service
                ;;
            [Nn]* )
                echo "用户取消安装"
                ;;
            * )
                echo "无效的输入"
                ;;
        esac
    else
        while true; do
            echo "-------------输入你想进行的操作-------------"
            echo "***1. 查看软件版本信息***"
            echo "***2. 卸载***"
            echo "***3. 查询状态或重启服务***"
            echo "***quit. 退出***"
            read -p "$1: " software
            case $software in
               1)
                rpm -qi $1
                ;;
               2)
                yum remove -y $1
                echo "软件卸载完成"
                break
                ;;
                3)      
                systemctl status $1.service
                read -p "是否需要重启服务[y/n]: " restart
                case $restart in    
                    [Yy]* )
                        systemctl restart $1.service
                        echo "服务重启完成"
                        break    
                        ;;
                    [Nn]* )
                        echo "取消"
                        break
                        ;;        
                    * )     
                        echo "无效的输入"
                        ;;
                esac
                ;;
               quit)
                echo "退出软件相关操作。"
                break
                ;;
                *)
                echo "无效的输入,请重新输入。"
                ;;
            esac
        done   
    fi
}


# 日志文件管理
manage_logs() {
    echo "选择日志管理操作:"
    echo "1. 清理旧的日志文件"
    echo "2. 压缩日志文件"
    read -p "请输入选择的操作编号: " log_option

    case $log_option in
        1)
            # 清理旧的日志文件
            read -p "请输入要清理的日志文件路径: " log_path
            # read -p "请输入日志文件的保留天数(默认为30天): " clean_days
            # clean_days=${clean_days:-30}
            # 如有时间要求可在下面find 命令中添加 -mtime +$clean_days 参数
            if [[ "$log_path" =~ ^/var/log/.*\.log$ ]]; then
                read -p "确定要清理 $log_path 下的日志文件吗? [y/n]: " confirm
                if [[ $confirm =~ [Yy] ]]; then
                    if [ -f "$log_path" ]; then
                        find "$log_path" -type f -mtime +$clean_days -exec rm -f {} \; && echo "$log_path$clean_days 天以前的文件已被清理."
                    else
                        echo "文件 $log_path 没有可清理的文件."
                    fi
                else
                    echo "清理操作已取消."
                fi
            else
                echo "警告:输入的路径不是一个有效的日志文件。"
            fi
            ;;
        2)
            # 压缩日志文件
            read -p "请输入要压缩的日志文件路径: " log_file_to_zip
            if [[ "$log_file_to_zip" =~ ^/var/log/.*\.log$ ]]; then
                read -p "确定要压缩 $log_file_to_zip 吗? [y/n]: " confirm
                if [[ $confirm =~ [Yy] ]]; then
                    if [ -f "$log_file_to_zip" ]; then
                        gzip "$log_file_to_zip" && echo "$log_file_to_zip 已被压缩."
                    else
                        echo "文件 $log_file_to_zip 不存在."
                    fi
                else
                    echo "压缩操作已取消."
                fi
            else
                echo "警告:输入的路径不是一个有效的日志文件。"
            fi
            ;;
        *)
            echo "无效的输入,请重新输入."
            ;;
    esac
}



# 初始化安全策略
init_security_policy() {
    while true; do
        echo "***选择你需要进行的操作***"
        echo "***1. 关闭防火墙***"
        echo "***2. 设置防火墙开机不自启动***"
        echo "***3. 启动防火墙***"
        echo "***4. 设置防火墙开机自启动***"
        echo "***5. 清空iptables规则组***"
        echo "***6. 查看iptables规则组***"
        echo "***7. 查看防火墙状态***"
        echo "***quit. 退出***"
        read -p "请输入数字选择对应安全策略: " answer

        case $answer in
            1)
                systemctl stop firewalld && echo "防火墙已关闭" || echo "关闭防火墙失败"
                ;;
            2)
                systemctl disable firewalld && echo "防火墙设置为开机不自启动。" || echo "设置开机不自启动失败"
                ;;
            3)
                systemctl start firewalld && echo "防火墙已启动。" || echo "启动防火墙失败"
                ;;
            4)
                systemctl enable firewalld && echo "防火墙设置为开机自启动。" || echo "设置开机自启动失败"
                ;;
            5)
                iptables -F && echo "规则组已清空。" || echo "清空规则组失败"
                ;;
            6)
                iptables -L && echo "规则组已显示。" || echo "显示规则组失败"
                ;;
            7)
                systemctl status firewalld && echo "正在查看防火墙状态。" || echo "查看防火墙状态失败"
                ;;
            quit)
                echo "退出安全策略配置。"
                break
                ;;
            *)
                echo "无效的输入,请重新输入。"
                ;;
        esac
    done
}

# 主菜单
main_menu() {
    while true; do
        echo "-------------输入你想进行的操作-------------"
        echo "***1. 安全策略防火墙相关***"
        echo "***2. yum源相关配置***"
        echo "***3. 查看远程IP连接***"
        echo "***4. 查看可登录账户***"
        echo "***5. 查看系统信息***"
        echo "***6. 日志文件管理***"
        echo "***7. 功能研发中***"
        echo "***8. 监控系统资源*"
        echo "***9. 判断用户是否存在***"
        echo "***10. 软件管理***"
        echo "***quit. 退出***"
        read -p "请输入数字选择对应操作: " aa

        case $aa in
            1)
                init_security_policy
                ;;
            2)
                config_yum_source
                ;;
            3)
                view_remote_ip
                ;;
            4)
                view_login_accounts
                ;;
            5)
                view_system_info
                ;;
            6)
                 manage_logs
                ;;
            7)
                ;;
            8)
                monitor_system_resources
                ;;
            9)
                check_user_exist
                ;;
            10) 
                read -p "请输入软件名: " software_name 
                install_software $software_name
                ;;
            quit)
                echo "退出脚本。"
                break
                ;;
            *)
                echo "无效的输入,请重新输入。"
                ;;
        esac
    done
}

# 执行
check_root
main_menu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值