shell脚本30个案例(五)

前言:

通过一个多月的shell学习,总共写出30个案例,分批次进行发布,这次总共发布了5个案例,希望能够对大家的学习和使用有所帮助,更多案例会在下期进行发布。

案例二十一、系统内核优化

1.问题:

在服务器或高性能计算环境中,系统内核的默认参数可能无法满足特定工作负载的需求,导致性能不佳。例如,网络连接数受限可能影响高并发网络应用的性能,内存管理策略不当可能导致内存利用效率低下,磁盘 I/O 调度策略可能不适合特定的存储设备,从而影响读写速度。因此,需要对系统内核进行优化以提高系统的整体性能。

2.分析:

网络参数优化:调整最大连接数相关参数:增加系统允许的最大文件描述符数量(fs.file - max)和网络连接跟踪表的大小(net.netfilter.nf_conntrack_max),以适应大量并发连接的场景。

优化 TCP 参数:调整 TCP 缓冲区大小(net.ipv4.tcp_rmem、net.ipv4.tcp_wmem)、TCP 连接超时时间(net.ipv4.tcp_fin_timeout)和 TCP 快速回收等参数(net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse),提高网络传输效率和连接处理速度。

内存管理优化:调整内存分配策略参数:例如,调整vm.swappiness参数来控制系统使用交换空间的倾向,减少不必要的磁盘交换,提高内存使用效率。

优化内存缓存参数:根据服务器的应用场景,调整内存页面缓存相关参数,如vm.vfs_cache_pressure,以平衡文件系统缓存和其他内存使用。

磁盘 I/O 优化:选择合适的 I/O 调度策略:对于不同类型的存储设备(如机械硬盘或固态硬盘),选择合适的 I/O 调度算法(如noop、deadline、cfq等),通过修改/sys/block/<device>/queue/scheduler(<device>为磁盘设备名)来实现。

调整磁盘预读参数:根据磁盘性能和应用的 I/O 模式,调整磁盘预读相关参数(如blockdev --setra命令),提高磁盘读取效率。

3.实现:

bash 复制代码
#!/bin/bash

# 备份原始内核配置文件
cp /etc/sysctl.conf /etc/sysctl.conf.bak

# 网络参数优化
echo "fs.file-max = 1000000" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_max = 500000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 16384 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf

# 内存管理优化
echo "vm.swappiness = 10" >> /etc/sysctl.conf
echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf

# 磁盘I/O优化(假设磁盘设备名为sda,这里以修改为deadline调度策略为例)
echo "echo deadline > /sys/block/sda/queue/scheduler" >> /etc/rc.local
chmod +x /etc/rc.local
blockdev --setra 4096 /dev/sda

# 使新的内核配置生效
sysctl -p

# 这里可以添加重启系统的命令,如果需要重启才能使所有优化生效
# reboot

4.实现解析:

备份原始内核配置文件:使用cp /etc/sysctl.conf /etc/sysctl.conf.bak将原始的内核配置文件/etc/sysctl.conf备份到/etc/sysctl.conf.bak。这样在优化出现问题时,可以回滚到原始配置。

网络参数优化部分:通过echo命令将一系列网络参数配置添加到/etc/sysctl.conf文件中。

fs.file - max = 1000000:将系统允许的最大文件描述符数量设置为 1000000,以支持大量的文件和网络连接。

net.netfilter.nf_conntrack_max = 500000:增加网络连接跟踪表的大小,适应更多的并发网络连接。

net.ipv4.tcp_rmem和net.ipv4.tcp_wmem:分别设置 TCP 接收缓冲区和发送缓冲区的大小,优化 TCP 数据传输。

net.ipv4.tcp_fin_timeout = 30:缩短 TCP 连接关闭时的等待时间,加快连接资源的回收。

net.ipv4.tcp_tw_recycle = 1和net.ipv4.tcp_tw_reuse = 1:启用 TCP 连接的快速回收和重用机制,提高服务器处理大量短连接的能力。

内存管理优化部分:vm.swappiness = 10:降低系统使用交换空间的倾向,只有当内存使用率达到 90%(100 - 10)时才更积极地使用交换空间,提高内存使用效率。

vm.vfs_cache_pressure = 50:调整文件系统缓存的回收压力,平衡文件系统缓存和其他内存使用。

磁盘 I/O 优化部分:echo "echo deadline > /sys/block/sda/queue/scheduler" >> /etc/rc.local:将设置磁盘sda的 I/O 调度策略为deadline的命令添加到/etc/rc.local文件中,并在系统启动时执行。deadline调度策略适用于一般的服务器场景,能在一定程度上平衡读写性能。同时,使用chmod +x /etc/rc.local赋予/etc/rc.local可执行权限。

blockdev --setra 4096 /dev/sda:设置磁盘sda的预读扇区数为 4096,根据磁盘性能和应用的 I/O 模式优化磁盘读取效率。

使新的内核配置生效:使用sysctl -p命令加载/etc/sysctl.conf中的新内核参数配置,使参数立即生效。部分参数可能需要重启系统才能完全生效,这里可以根据实际情况添加reboot命令,但需要谨慎操作,因为重启会中断当前的服务。

5.结果验证:

测试优化前后的磁盘 I/O 性能,优化前的读写速度

bash 复制代码
dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct   读
dd if=testfile of=/dev/null bs=1M count=1024 iflag=direct    写

优化后的读写速度

可以看到速度有一定的提升

案例二十二、一键部署LNMP环境

1.问题:

在服务器环境中,手动搭建 LNMP 环境步骤繁琐且容易出错,需要耗费大量时间。包括安装 Nginx、MySQL、PHP 以及相关的配置和启动操作,不同软件之间可能还存在版本兼容性问题。因此,需要一个脚本来自动化完成 LNMP 环境的部署,提高部署效率和准确性。

2.分析:

软件安装与版本选择:Nginx:从官方或可靠的软件源获取 Nginx 安装包,根据服务器性能和需求选择合适的版本。需要注意安装过程中的依赖项处理。

MySQL:可以选择 MySQL 官方版本或者其分支(如 MariaDB)。同样要处理好安装依赖,并且在安装后进行必要的配置,如设置 root 用户密码、创建数据库等。

PHP:确定要安装的 PHP 版本,安装 PHP 以及与 Web 应用相关的扩展,如php - mysql、php - fpm等,以支持与 MySQL 和 Nginx 的协同工作。

配置管理:Nginx 配置:修改 Nginx 的配置文件(如nginx.conf),设置服务器域名、监听端口、根目录等相关参数,同时配置 Nginx 与 PHP - FPM 的交互。

PHP - FPM 配置:调整 PHP - FPM 的配置,包括监听地址、进程管理、资源限制等,确保 PHP 能够高效稳定地运行。

MySQL 配置(如果有):除了设置 root 用户密码外,还可以根据需要配置数据库的字符集、存储引擎等参数。

服务启动与检查:安装完成后,启动 Nginx、MySQL 和 PHP - FPM 服务,并检查服务是否正常启动,避免出现启动失败但未被发现的情况。

3.流程图:

4.实现:

bash 复制代码
#!/bin/bash

# 定义函数用于输出信息
function echo_info() {
    echo -e "[\033[36m$(date +%T)\033[0m] [\033[32mINFO\033[0m] \033[37m$@\033[0m"
}
function echo_warning() {
    echo -e "[\033[36m$(date +%T)\033[0m] [\033[1;33mWARNING\033[0m] \033[1;37m$@\033[0m"
}
function echo_error() {
    echo -e "[\033[36m$(date +%T)\033[0m] [\033[41mERROR\033[0m] \033[1;31m$@\033[0m"
}

# 安装 Nginx
install_nginx() {
    echo_info "正在安装 Nginx..."
    yum install -y epel-release.noarch
    yum install -y nginx
    if [ $? -eq 0 ]; then
        echo_info "Nginx 安装成功。"
    else
        echo_error "Nginx 安装失败。"
    fi
}

# 安装 MySQL(这里以 MariaDB 为例)
install_mysql() {
    echo_info "正在安装 MariaDB..."
    yum install -y mariadb-server mariadb
    if [ $? -eq 0 ]; then
        echo_info "MariaDB 安装成功。"
        echo_info "正在启动 MariaDB..."
        systemctl start mariadb
        if [ $? -eq 0 ]; then
            echo_info "MariaDB 启动成功。"
            echo_info "设置 MariaDB 开机自启..."
            systemctl enable mariadb
            echo_info "正在设置 MariaDB root 用户密码..."
            mysqladmin -u root password '123456'
            echo_info "密码设置成功。"
        else
            echo_error "MariaDB 启动失败。"
        fi
    else
        echo_error "MariaDB 安装失败。"
    fi
}

# 安装 PHP 及相关扩展
install_php() {
    echo_info "正在安装 PHP 及相关扩展..."
    yum install -y php php-fpm php-mysql php-gd php-mbstring php-xml
    if [ $? -eq 0 ]; then
        echo_info "PHP 及相关扩展安装成功。"
    else
        echo_error "PHP 安装失败。"
    fi
}

# 配置 Nginx
configure_nginx() {
    echo_info "正在配置 Nginx..."
    # 这里可以添加具体的 Nginx 配置修改代码,例如:
    # sed -i's/listen       80;/listen       8080;/' /etc/nginx/nginx.conf
    # 创建一个简单的 Nginx 服务器配置块示例
    cat > /etc/nginx/conf.d/default.conf << EOF
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  \$document_root\$fastcgi_script_name;
        include        fastcgi_params;
    }
}
EOF
    echo_info "Nginx 配置完成。"
}

# 配置 PHP - FPM
configure_php_fpm() {
    echo_info "正在配置 PHP - FPM..."
    # 这里可以修改 PHP - FPM 的配置文件,例如:
    # sed -i's/listen = 127.0.0.1:9000/listen = 127.0.0.1:9000;/' /etc/php-fpm.d/www.conf
    echo_info "PHP - FPM 配置完成。"
}

# 启动服务并检查状态
start_and_check_services() {
    echo_info "正在启动 Nginx 服务..."
    systemctl start nginx
    if [ $? -eq 0 ]; then
        echo_info "Nginx 服务启动成功。"
    else
        echo_error "Nginx 服务启动失败。"
    fi

    echo_info "正在启动 PHP - FPM 服务..."
    systemctl start php-fpm
    if [ $? -eq 0 ]; then
        echo_info "PHP - FPM 服务启动成功。"
    else
        echo_error "PHP - FPM 服务启动失败。"
    fi
}

# 主函数,按顺序调用各个函数
main() {
    install_nginx
    install_mysql
    install_php
    configure_nginx
    configure_php_fpm
    start_and_check_services
}

main

5.实现解析:

信息输出函数:定义了echo_info、echo_warning和echo_error函数,用于以不同颜色和格式输出信息、警告和错误消息,方便在脚本执行过程中查看状态。这些函数使用echo -e和 ANSI 转义序列来实现彩色输出。

安装 Nginx 函数install_nginx:使用yum install -y nginx命令安装 Nginx。-y选项表示自动回答yes以确认安装。通过检查命令的返回值(?)判断安装是否成功,若? -eq 0,则输出安装成功信息;否则输出安装失败信息。

安装 MySQL(MariaDB)函数install_mysql:使用yum install -y mariadb - server mariadb安装 MariaDB 服务器和客户端。安装成功后,启动 MariaDB 服务(systemctl start mariadb),并根据启动命令的返回值判断启动是否成功,输出相应信息。若启动成功,将 MariaDB 设置为开机自启(systemctl enable mariadb)。接着使用mysqladmin -u root password 'your_password'设置 root 用户的密码,这里的your_password需要替换为实际的密码。

安装 PHP 及相关扩展函数install_php:使用yum install -y php php - fpm php - mysql php - gd php - mbstring php - xml安装 PHP 以及常用的与 Web 应用相关的扩展。通过检查安装命令的返回值判断安装是否成功,输出相应信息。

配置 Nginx 函数configure_nginx:输出正在配置 Nginx 的信息,这里可以添加更详细的 Nginx 配置修改代码。在示例中,创建了一个简单的/etc/nginx/conf.d/default.conf配置文件,设置了 Nginx 的监听端口(80)、服务器名称(localhost)、根目录(/usr/share/nginx/html)以及 PHP 相关的配置(location ~ \.php$部分),用于处理 PHP 文件的请求,将其转发到 PHP - FPM 服务。

配置 PHP - FPM 函数configure_php_fpm:输出正在配置 PHP - FPM 的信息,这里可以添加修改 PHP - FPM 配置文件(如/etc/php - fpm.d/www.conf)的代码,示例中只是简单输出配置完成信息,实际应用中可能需要根据需求修改监听地址等参数。

启动服务并检查状态函数start_and_check_services:分别启动 Nginx 服务(systemctl start nginx)和 PHP - FPM 服务(systemctl start php - fpm),并根据启动命令的返回值判断启动是否成功,输出相应信息。

主函数main:按照安装 Nginx、安装 MySQL、安装 PHP、配置 Nginx、配置 PHP - FPM、启动服务并检查状态的顺序调用各个函数,完成 LNMP 环境的部署。

6.结果验证:

首先关闭服务器的防火墙

Systemctl stop firewalld

将网页内容修改为test1

echo "test1" > /usr/share/nginx/html/index.html

打开浏览器,搜索http://服务器ip,显示如下界面,表示部署成功

案例二十三、一键部署LAMP

1.问题:

手动在 Linux 系统上部署 LAMP 环境需要分别安装和配置 Apache、MySQL 和 PHP,操作繁琐且容易出错,需要一个自动化脚本来快速准确地完成部署。

2.分析:

软件安装源:Apache:可以从系统默认的软件仓库(如 yum 仓库)获取安装包,选择合适的版本进行安装。

MySQL:可选择 MySQL 官方版本或其兼容的分支(如 MariaDB),从相应的官方或可靠的仓库获取安装包。

PHP:确定要安装的 PHP 版本,并从系统仓库安装 PHP 以及与 Apache 和 MySQL 协同工作所需的扩展,如php - mysql等。

依赖关系处理:每个软件在安装过程中可能有依赖项,需要确保这些依赖项在安装软件之前或同时安装,以保证安装顺利进行。

配置管理:Apache 配置:设置服务器域名、监听端口、文档根目录等相关参数,确保 Apache 能正确处理网页请求。

MySQL 配置:设置 root 用户密码、数据库字符集、存储引擎等参数,同时创建必要的数据库和用户(如果需要)。

PHP 配置:调整 PHP 的配置文件,如php.ini,设置时区、错误显示等参数,并确保 PHP 模块与 Apache 正确集成。

3.流程图:

4.实现:

bash 复制代码
#!/bin/bash

# 定义函数用于输出信息
function echo_info() {
    echo -e "[\033[36m$(date +%T)\033[0m] [\033[32mINFO\033[0m] \033[37m$@\033[0m"
}
function echo_warning() {
    echo -e "[\033[36m$(date +%T)\033[0m] [\033[1;33mWARNING\033[0m] \033[1;37m$@\033[0m"
}
function echo_error() {
    echo -e "[\033[36m$(date +%T)\033[0m] [\033[41mERROR\033[0m] \033[1;31m$@\033[0m"
}

# 安装 Apache
install_apache() {
    echo_info "正在安装 Apache..."
    yum install -y httpd
    if [ $? -eq 0 ]; then
        echo_info "Apache 安装成功。"
    else
        echo_error "Apache 安装失败。"
    fi
}

# 安装 MySQL(这里以 MariaDB 为例)
install_mysql() {
    echo_info "正在安装 MariaDB..."
    yum install -y mariadb-server mariadb
    if [ $? -eq 0 ]; then
        echo_info "MariaDB 安装成功。"
        echo_info "正在启动 MariaDB..."
        systemctl start mariadb
        if [ $? -eq 0 ]; then
            echo_info "MariaDB 启动成功。"
            echo_info "设置 MariaDB 开机自启..."
            systemctl enable mariadb
            echo_info "正在设置 MariaDB root 用户密码..."
            mysqladmin -u root password '123456'
            echo_info "密码设置成功。"
        else
            echo_error "MariaDB 启动失败。"
        fi
    else
        echo_error "MariaDB 安装失败。"
    fi
}

# 安装 PHP 及相关扩展
install_php() {
    echo_info "正在安装 PHP 及相关扩展..."
    yum install -y php php-mysql php-gd php-mbstring php-xml
    if [ $? -eq 0 ]; then
        echo_info "PHP 及相关扩展安装成功。"
    else
        echo_error "PHP 安装失败。"
    fi
}

# 配置 Apache
configure_apache() {
    echo_info "正在配置 Apache..."
    # 修改 Apache 主配置文件,这里只是示例,可根据实际需求修改
    sed -i's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf
    echo_info "Apache 配置完成。"
}

# 配置 MySQL
configure_mysql() {
    echo_info "正在配置 MySQL..."
    # 这里可以添加更多的 MySQL 配置操作,如修改 my.cnf 文件等
    echo_info "MySQL 配置完成(示例,可进一步完善)。"
}

# 配置 PHP
configure_php() {
    echo_info "正在配置 PHP..."
    # 修改 php.ini 文件,设置时区等,这里只是示例
    sed -i " s/;date.timezone =/date.timezone = Asia/Shanghai/" /etc/php.ini
    echo_info "PHP 配置完成(示例,可进一步完善)。"
}

# 启动服务并检查状态
start_and_check_services() {
    echo_info "正在启动 Apache 服务..."
    systemctl start httpd
    if [ $? -eq 0 ]; then
        echo_info "Apache 服务启动成功。"
    else
        echo_error "Apache 服务启动失败。"
    fi

    echo_info "正在启动 PHP 模块(与 Apache 集成)..."
    # 这里可以根据实际情况检查 PHP 与 Apache 集成是否成功启动,例如检查相关模块是否加载
    echo_info "PHP 模块启动成功(示例,可进一步检查)。"
}

# 主函数,按顺序调用各个函数
main() {
    install_apache
    install_mysql
    install_php
    configure_apache
    configure_mysql
    configure_php
    start_and_check_services
}

main

5.实现解析:

信息输出函数:定义了echo_info、echo_warning和echo_error函数,用于以不同颜色和格式输出信息、警告和错误消息,方便在脚本执行过程中查看状态。这些函数使用echo -e和 ANSI 转义序列来实现彩色输出。

安装 Apache 函数install_apache:使用yum install -y httpd命令安装 Apache。-y选项表示自动回答yes以确认安装。通过检查命令的返回值(?)判断安装是否成功,若? -eq 0,则输出安装成功信息;否则输出安装失败信息。

安装 MySQL(MariaDB)函数install_mysql:使用yum install -y mariadb - server mariadb安装 MariaDB 服务器和客户端。安装成功后,启动 MariaDB 服务(systemctl start mariadb),并根据启动命令的返回值判断启动是否成功,输出相应信息。若启动成功,将 MariaDB 设置为开机自启(systemctl enable mariadb)。接着使用mysqladmin -u root password 'your_password'设置 root 用户的密码,这里的your_password需要替换为实际的密码。

安装 PHP 及相关扩展函数install_php:使用yum install -y php php - mysql php - gd php - mbstring php - xml安装 PHP 以及常用的与 Web 应用相关的扩展。通过检查安装命令的返回值判断安装是否成功,输出相应信息。

配置 Apache 函数configure_apache:输出正在配置 Apache 的信息,这里使用sed -i's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf修改 Apache 的主配置文件,将监听端口从80改为8080。这只是一个简单的配置修改示例,实际应用中可能需要根据具体需求进行更复杂的配置。

配置 MySQL 函数configure_mysql:输出正在配置 MySQL 的信息,这里只是简单输出完成信息,实际应用中可以添加更多的配置操作,如修改my.cnf文件来设置数据库字符集、缓存大小等参数。

配置 PHP 函数configure_php:输出正在配置 PHP 的信息,使用sed -i "s/;date.timezone =/date.timezone = Asia/Shanghai/" /etc/php.ini修改php.ini文件,将 PHP 的时区设置为Asia/Shanghai。这也是一个简单的配置示例,可根据实际情况进一步完善。

启动服务并检查状态函数start_and_check_services:启动 Apache 服务(systemctl start httpd),根据启动命令的返回值判断启动是否成功,输出相应信息。对于 PHP 模块与 Apache 的集成启动,这里只是简单输出成功信息,实际可以添加更多检查逻辑,如检查相关的 PHP 模块是否在 Apache 中正确加载。

主函数main:按照安装 Apache、安装 MySQL、安装 PHP、配置 Apache、配置 MySQL、配置 PHP、启动服务并检查状态的顺序调用各个函数,完成 LAMP 环境的部署。

6.结果验证:

首先关闭防火墙

systemctl stop firewalld

打开浏览器,输入http://服务器ip,显示如下,表示脚本运行成功

案例二十四、判断当前用户是否为root用户

1.问题:

在 CentOS 系统中,编写一个 shell 脚本以准确判断当前正在操作的用户是否为 root 用户。

2.分析:

在 Linux 系统中,每个用户都有一个唯一的用户名标识。root 用户是具有最高权限的特殊用户,其用户名固定为 "root"。

可以通过获取当前用户的用户名信息,并与 "root" 进行比较来判断当前用户是否为 root 用户。在 shell 脚本中,可以使用一些特定的命令和语法来实现这个功能。

3.流程图:

4.实现:

bash 复制代码
#!/bin/bash

# 获取当前用户的用户名
current_user=$(whoami)

# 判断当前用户是否为root用户
if [ "$current_user" == "root" ]; then
    echo "当前用户是root用户"
else
    echo "当前用户不是root用户"
fi

5.实现解析:

current_user=$(whoami):使用whoami命令来获取当前正在操作的用户的用户名,并将其赋值给变量current_user。whoami命令会返回当前用户的登录名。

if [ "$current_user" == "root" ]; then... else... fi:这是一个条件判断语句。首先,将变量current_user的值与字符串 "root" 进行比较。如果两者相等,即当前用户的用户名是 "root",那么就执行if语句块中的内容,也就是输出 "当前用户是 root 用户";如果不相等,就执行else语句块中的内容,输出 "当前用户不是 root 用户"。

6.结果验证:

直接执行脚本

可以看到当前用户是root用户。

案例二十五、一键安装常用工具

1.问题:

在 CentOS 系统中,自动化安装一些常用的工具,如 wget、tree、vim 等,以提高系统的初始配置效率并满足日常使用需求。

2.分析:

需要确定要安装的常用工具列表,并了解在 CentOS 系统中使用何种包管理工具进行安装(如 yum)。

要考虑安装过程中的错误处理,例如网络问题导致的软件包下载失败或者依赖关系无法解决等情况。

3.流程图:

4.实现:

bash 复制代码
#!/bin/bash

# 定义要安装的常用工具数组
tools=(wget tree vim)

# 安装成功的工具列表
success_list=()
# 安装失败的工具列表
failure_list=()

# 循环安装工具
for tool in "${tools[@]}"
do
    echo "正在安装 $tool..."
    yum install -y "$tool" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        success_list+=("$tool")
    else
        failure_list+=("$tool")
    fi
done

# 输出安装结果
echo "安装完成,以下工具安装成功:"
for s_tool in "${success_list[@]}"
do
    echo $s_tool
done

echo "以下工具安装失败:"
for f_tool in "${failure_list[@]}"
do
    echo $f_tool
done

5.实现解析:

tools=(wget tree vim):定义了一个包含要安装的常用工具名称的数组。

success_list=() 和 failure_list=():分别初始化安装成功和失败的工具列表为空数组,用于后续记录安装结果。

for tool in "${tools[@]}"... done:循环遍历 tools 数组中的每个工具名称。

yum install -y "$tool" > /dev/null 2>&1:使用 yum 命令安装当前工具,并将标准输出和标准错误输出重定向到 /dev/null,以避免安装过程中的大量输出信息干扰脚本执行。-y 参数表示自动回答 yum 安装过程中的所有提示为 "是"。

if [ ? -eq 0 \]; then... else... fi:通过检查上一个命令(yum install)的返回值(?)来判断安装是否成功。如果返回值为 0,表示安装成功,将工具名称添加到 success_list 数组中;否则添加到 failure_list 数组中。

最后两个循环分别输出安装成功和失败的工具列表。

6.结果验证:

直接执行脚本

可以看到所有工具安装成功,没有工具安装失败。

相关推荐
悄悄敲敲敲13 分钟前
Linux:基础开发工具
linux·运维·服务器
YRr YRr16 分钟前
深入理解ROS中的参数服务器及其应用
运维·服务器·ros
红茶要加冰22 分钟前
一、docker简介
运维·docker·容器
Industio_触觉智能24 分钟前
瑞芯微方案主板Linux修改系统串口波特率教程,触觉智能RK3562开发板演示
linux·开发板·串口调试·rk3562·波特率
万能菜道人29 分钟前
window下docker使用一些多媒体应用
运维·docker·容器
wxgnolux1 小时前
ssh 登入报错问题解决过程记录
运维·ssh
橘子真甜~1 小时前
Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)
linux·运维·服务器·c语言·io·文件操作·文件fd
A charmer1 小时前
Linux 权限管理:用户分类、权限解读与常见问题剖析
linux·运维·服务器
运维自动化&云计算1 小时前
华为交换机与锐捷交换机端口链路聚合的配置
服务器·网络·华为
羊村懒哥1 小时前
linux-安全-iptables防火墙基础笔记
linux·网络·安全