首页主机资讯CentOS Stream 8脚本编程基础

CentOS Stream 8脚本编程基础

时间2025-11-10 15:36:03发布访客分类主机资讯浏览1484
导读:CentOS Stream 8脚本编程基础指南 CentOS Stream 8作为RHEL的滚动更新发行版,其脚本编程以Shell脚本为核心,适用于自动化日常任务(如日志清理、服务监控)、系统管理(如用户管理、磁盘空间检查)等场景。以下从基...

CentOS Stream 8脚本编程基础指南
CentOS Stream 8作为RHEL的滚动更新发行版,其脚本编程以Shell脚本为核心,适用于自动化日常任务(如日志清理、服务监控)、系统管理(如用户管理、磁盘空间检查)等场景。以下从基础准备、核心语法、实战技巧到最佳实践,梳理脚本编程的关键内容。

一、基础准备:环境与工具

在开始编写脚本前,需完成以下准备工作:

  1. 安装开发工具:确保系统安装bashvim等基础工具,可通过以下命令安装:
    sudo yum groupinstall "Development Tools"
    sudo yum install bash-completion vim lrzsz wget
    
    bash-completion可提升命令行输入效率,vim是常用的文本编辑器。
  2. 验证Shell环境:CentOS Stream 8默认使用bash,可通过echo $SHELL确认,若未使用bash,可通过chsh -s /bin/bash切换。

二、脚本基本结构与执行

  1. 创建脚本文件:使用文本编辑器(如vim)创建.sh后缀的文件,例如hello.sh

    vim hello.sh
    

    输入以下内容(第一行为Shebang,指定解释器):

    #!/bin/bash
    # 输出Hello World
    echo "Hello, World!"
    
    • #!/bin/bash:声明使用bash解释器,是脚本的必需行;
    • #:注释符号,用于说明脚本功能。
  2. 赋予执行权限:脚本需具备可执行权限,使用chmod命令:

    chmod +x hello.sh
    
  3. 运行脚本:通过以下两种方式运行:

    • 直接执行(需指定路径):./hello.sh
    • 通过解释器执行:bash hello.sh(无需权限,但需指定解释器)。

三、核心语法:变量、条件与循环

1. 变量定义与使用

  • 定义变量:使用name=value格式(等号两边无空格),例如:
    APP_NAME="web_server"
    LOG_DIR="/var/log/$APP_NAME"  # 变量引用需用$符号
    MAX_SIZE=100
    
  • 输出变量:使用echo命令,例如:
    echo "应用程序名称: $APP_NAME"
    echo "日志目录: $LOG_DIR"
    
  • 参数传递:脚本可通过$1(第一个参数)、$2(第二个参数)接收命令行参数,例如:
    # 脚本内容:echo "Hello, $1!"
    ./script.sh John  # 输出:Hello, John!
    

2. 条件判断(if语句)

  • 基本语法
    if [ condition ];
         then
        # 条件成立时执行的命令
    elif [ condition ];
         then
        # 其他条件成立时执行的命令
    else
        # 所有条件均不成立时执行的命令
    fi
    
  • 常用条件测试
    • 字符串比较:=(等于)、!=(不等于)、-z(空字符串);
    • 数值比较:-eq(等于)、-gt(大于)、-lt(小于);
    • 文件测试:-e(文件/目录存在)、-f(普通文件)、-d(目录)。
  • 示例:检查服务状态:
    SERVICE="nginx"
    if systemctl is-active --quiet "$SERVICE";
         then
        echo "$SERVICE 正在运行"
    else
        echo "$SERVICE 未运行"
    fi
    

3. 循环结构

  • for循环:遍历列表或通配符匹配的文件,例如:
    # 遍历列表
    for fruit in apple banana orange;
         do
        echo "水果: $fruit"
    done
    # 遍历文件(压缩/var/log下所有.log文件)
    for log_file in /var/log/*.log;
         do
        gzip "$log_file"
    done
    
  • while循环:当条件为真时循环,例如:
    count=1
    while [ $count -le 5 ];
     do
        echo "循环次数: $count"
        ((count++))  # 数值递增
    done
    

4. 函数封装

  • 定义函数:使用function name()name()格式,例如:
    function disk_alert() {
    
        local usage=$(df -h / | awk 'NR==2 {
    print $5}
        ' | tr -d '%')  # 获取根分区使用率
        if [ "$usage" -gt 90 ];
     then
            echo "警告: 根分区使用率超过90%!"
            return 1  # 返回非0表示失败
        fi
        return 0  # 返回0表示成功
    }
        
    
  • 调用函数:直接使用函数名,例如:
    disk_alert
    if [ $? -ne 0 ];
         then  # $?获取上一条命令的返回值
        echo "需清理磁盘空间"
    fi
    

四、实战技巧:提升脚本实用性

  1. 调试脚本:使用bash -x命令查看脚本执行过程,例如:

    bash -x hello.sh
    

    输出会显示每一步命令的执行结果,便于排查错误。

  2. 错误处理

    • 检查命令返回值:通过$?获取上一条命令的返回值(0表示成功,非0表示失败),例如:
      rm /tmp/test.log
      if [ $? -ne 0 ];
           then
          echo "删除文件失败"
      fi
      
    • 设置set -e:在脚本开头添加set -e,使脚本在遇到错误时立即退出,避免继续执行导致更严重的问题。
  3. 定时任务:使用crontab配置定时执行脚本,例如:

    • 编辑当前用户的定时任务:crontab -e
    • 添加以下规则(每天凌晨3点清理日志):
      0 3 * * * /path/to/log_clean.sh
      
    • 保存后,cron会自动加载任务。

五、最佳实践:编写高质量脚本

  1. 添加描述信息:在脚本开头添加注释,说明脚本功能、作者、创建时间等,例如:

    #!/bin/bash
    # 脚本名称: log_clean.sh
    # 功能: 清理超过30天的日志文件
    # 作者: John
    # 创建时间: 2025-11-09
    
  2. 备份重要数据:修改系统配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0)前,先备份:

    cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak
    
  3. 刷新环境变量:若脚本中使用了自定义环境变量,需通过source /etc/profile. /etc/profile刷新,确保变量生效。

  4. 使用EPEL仓库:安装额外的软件包(如wgetgit)时,可先添加EPEL仓库:

    sudo yum install epel-release
    

    EPEL(Extra Packages for Enterprise Linux)提供了更多常用的软件包。

通过以上基础内容,可快速掌握CentOS Stream 8上的Shell脚本编程技能。结合实际需求,可进一步学习awk(文本处理)、sed(流编辑)、expect(自动化交互)等工具,提升脚本的复杂度与实用性。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS Stream 8脚本编程基础
本文地址: https://pptw.com/jishu/746319.html
CentOS Stream 8网络故障排查技巧 怎样解决centos文件冲突问题

游客 回复需填写必要信息