MST
星途 面试题库

面试题:Bash脚本优化与跨平台兼容性处理

编写一个复杂的Bash脚本,该脚本需要在不同Linux发行版(如CentOS、Ubuntu)以及macOS系统上都能稳定运行。脚本功能为自动化部署一个Web应用,包括安装依赖软件包、配置环境变量、启动服务等操作,要求对脚本进行性能优化,减少资源消耗。
23.1万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 检测操作系统类型
OS=$(uname -s)
PACKAGE_MANAGER=""

if [ "$OS" == "Linux" ]; then
    if grep -qi "centos" /etc/os-release; then
        PACKAGE_MANAGER="yum"
    elif grep -qi "ubuntu" /etc/os-release; then
        PACKAGE_MANAGER="apt-get"
    else
        echo "Unsupported Linux distribution"
        exit 1
    fi
elif [ "$OS" == "Darwin" ]; then
    PACKAGE_MANAGER="brew"
else
    echo "Unsupported operating system"
    exit 1
fi

# 安装依赖软件包
if [ "$PACKAGE_MANAGER" == "yum" ]; then
    sudo $PACKAGE_MANAGER install -y httpd php php-mysqlnd
elif [ "$PACKAGE_MANAGER" == "apt-get" ]; then
    sudo $PACKAGE_MANAGER update
    sudo $PACKAGE_MANAGER install -y apache2 php libapache2-mod-php php-mysql
elif [ "$PACKAGE_MANAGER" == "brew" ]; then
    brew install httpd php mysql
fi

# 配置环境变量
echo 'export WEB_APP_HOME=/var/www/html' | sudo tee -a /etc/profile
source /etc/profile

# 假设Web应用代码位于当前目录的webapp目录下
if [ -d "webapp" ]; then
    if [ "$OS" == "Linux" ]; then
        sudo cp -r webapp/* $WEB_APP_HOME
    elif [ "$OS" == "Darwin" ]; then
        cp -r webapp/* /usr/local/var/www
    fi
else
    echo "Web application code directory not found"
    exit 1
fi

# 启动服务
if [ "$PACKAGE_MANAGER" == "yum" ]; then
    sudo systemctl start httpd
    sudo systemctl enable httpd
elif [ "$PACKAGE_MANAGER" == "apt-get" ]; then
    sudo systemctl start apache2
    sudo systemctl enable apache2
elif [ "$PACKAGE_MANAGER" == "brew" ]; then
    brew services start httpd
fi

# 性能优化相关
# 对于Linux系统,优化httpd/apache2配置
if [ "$OS" == "Linux" ]; then
    if [ "$PACKAGE_MANAGER" == "yum" ]; then
        sudo sed -i 's/#ServerLimit 256/ServerLimit 128/' /etc/httpd/conf/httpd.conf
        sudo sed -i 's/#MaxRequestWorkers 256/MaxRequestWorkers 128/' /etc/httpd/conf/httpd.conf
    elif [ "$PACKAGE_MANAGER" == "apt-get" ]; then
        sudo sed -i 's/#ServerLimit 256/ServerLimit 128/' /etc/apache2/apache2.conf
        sudo sed -i 's/#MaxRequestWorkers 256/MaxRequestWorkers 128/' /etc/apache2/apache2.conf
    fi
    sudo systemctl restart httpd
elif [ "$OS" == "Darwin" ]; then
    # 对于macOS,优化httpd配置
    sudo sed -i '' 's/#ServerLimit 256/ServerLimit 128/' /usr/local/etc/httpd/httpd.conf
    sudo sed -i '' 's/#MaxRequestWorkers 256/MaxRequestWorkers 128/' /usr/local/etc/httpd/httpd.conf
    brew services restart httpd
fi

echo "Web application deployed successfully"

上述脚本实现了在CentOS、Ubuntu和macOS系统上自动化部署Web应用的功能。脚本首先检测操作系统类型并确定对应的包管理器,然后安装所需依赖软件包,配置环境变量,复制Web应用代码到相应目录,并启动Web服务。同时还对Web服务(httpd/apache2)进行了简单的性能优化配置,减少资源消耗。

请注意:

  1. 上述脚本中的Web应用代码位置假设在当前目录的webapp目录下,实际应用中需根据真实路径调整。
  2. 对于MySQL相关配置,脚本仅安装了客户端,实际应用中可能需要更详细的数据库配置和连接设置。