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.实现:

#!/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 性能,优化前的读写速度

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.实现:

#!/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.实现:

#!/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.实现:

#!/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.实现:

#!/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.结果验证:

直接执行脚本

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式集群下如何做到唯一序列号

优质博文&#xff1a;IT-BLOG-CN 分布式架构下&#xff0c;生成唯一序列号是设计系统常常会遇到的一个问题。例如&#xff0c;数据库使用分库分表的时候&#xff0c;当分成若干个sharding表后&#xff0c;如何能够快速拿到一个唯一序列号&#xff0c;是经常遇到的问题。实现思…

ChatGPT/AI辅助网络安全运营之-数据解压缩

在网络安全的世界中&#xff0c;经常会遇到各种压缩的数据&#xff0c;比如zip压缩&#xff0c;比如bzip2压缩&#xff0c;gzip压缩&#xff0c;xz压缩&#xff0c;7z压缩等。网络安全运营中需要对这些不同的压缩数据进行解压缩&#xff0c;解读其本意&#xff0c;本文将探索一…

C++小问题

怎么分辨const修饰的是谁 是限定谁不能被改变的&#xff1f; 在C中&#xff0c;const关键字的用途和位置非常关键&#xff0c;它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象&#xff0c;并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接&#xff1a; 二进制压缩包&#xff08;推荐&#xff09;: ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…

C++趣味编程:基于树莓派Pico的模拟沙漏-倾斜开关与LED的互动实现

沙漏,作为一种古老的计时工具,利用重力让沙子通过狭小通道,形成了计时效果。在现代,我们可以通过电子元件模拟沙漏的工作原理。本项目利用树莓派Pico、倾斜开关和LED,实现了一个电子沙漏。以下是项目的详细技术解析与C++代码实现。 一、项目概述 1. 项目目标 通过倾斜开关…

pycharm链接neo4j(导入文件)

1.新建csv文件 2.写入文件 3.运行代码 import csv from py2neo import Graph, Node, Relationship# 连接到Neo4j数据库&#xff0c;使用Bolt协议 graph Graph("bolt://localhost:7687", auth("neo4j", "password"))# 读取CSV文件 with open(…

【C++】多线程

目录 一 概念 1 多线程 2 多进程与多线程 3 多线程理解 二 创建线程 1 thread 2 join() 和 detach() 3 this_thread 三 std::mutex 1 lock 和 unlock 2 lock_guard 3 unique_lock 四 condition_variable 五 std::atomic 一 概念 1 多线程 在C11之前&#xff0…

Kafka 图形化工具 Eagle安装

Kafka 图形化工具 Eagle 3.0.1版本安装 1、安装JDK jdk安装 2、安装kafka 如未安装kafka&#xff0c;需要先安装完kafka 3、下载kafka-eagle 官网下载地址 wget https://github.com/smartloli/kafka-eagle-bin/archive/v3.0.1.tar.gz #移动到安装目录 mv v3.0.1.tar.gz…

vue实现echarts饼图自动轮播

echarts官网&#xff1a;Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…

CSS动画案例6

目录 一、介绍二、静态页面的布局1.HTML部分2.CSS 三、动画交互四、结束语 一、介绍 本节内容我们来仿照一个网站&#xff08;戳我进网站&#xff09;的进入页面时的doing动画部分&#xff0c;首先是大标题从最小变为最大&#xff0c;然后是副标题从下向上走&#xff0c;最后是…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

工作-k8s问题处理篇

前言&#xff1a;公司这边为集团&#xff0c;所以项目较多&#xff0c;我目前总负责的项目架构有十六个&#xff0c;其中还有海外项目&#xff0c;不过底下也有一定的细分&#xff0c;同事解决不了的问题会升级到我这&#xff0c;只k8s容器平台常用的就有三种&#xff0c;一种是…

spring boot3.3.5 logback-spring.xml 配置

新建 resources/logback-spring.xml 控制台输出颜色有点花 可以自己更改 <?xml version"1.0" encoding"UTF-8"?> <!--关闭文件扫描 scanfalse --> <configuration debug"false" scan"false"><springProperty …

MySQL--SQL优化

目录 1 插入数据 1.1 insert优化 1.1.1 批量插入 1.1.2 手动提交事务 1.1.3 主键顺序插入 1.2 大批量插入数据 2 主键优化 2.1 数据组织方式 2.2 页分裂 2.3 页合并 2.4 主键设计原则 3 order by优化 4 group by优化 1. 使用索引 2. 减少数据集大小 3. 使用合适的聚…

【计算机网络】实验2:总线型以太网的特性

实验 2&#xff1a;总线型以太网的特性 一、 实验目的 加深对MAC地址&#xff0c;IP地址&#xff0c;ARP协议的理解。 了解总线型以太网的特性&#xff08;广播&#xff0c;竞争总线&#xff0c;冲突&#xff09;。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实…

Java函数式编程【二】【Stream的装饰】【中间操作】【map映射器】【摊平映射器flatMap】

一、Java的Stream流式编程中的中间操作 Java的Stream流式编程中&#xff0c;中间操作是对数据流进行处理的一种方式&#xff0c;这些操作通常返回流对象本身&#xff0c;以便可以链接更多的操作。以下是一些常见的中间操作&#xff1a; filter(Predicate predicate) - 用于通过…

使用pymupdf提取PDF文档中的文字和其颜色

最近我在捣鼓一个PDF文件&#xff0c;想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的&#xff0c;pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下&#xff1a; impor…

MYSQL 多表练习

Sutdent表的定义 ---------------------------------------------------------------------------------------------------- | 字段名 | Id | Name | Sex | Birth | Department | Address | -------------------…

2024年12月HarmonyOS应用开发者基础认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同 更新时间&#xff1a;2024年12月3日 这是基础认证题库&#xff0c;不是高级认证题库注意看清楚标…