CentOS Stream 8脚本编程基础
CentOS Stream 8脚本编程基础指南
CentOS Stream 8作为RHEL的滚动更新发行版,其脚本编程以Shell脚本为核心,适用于自动化日常任务(如日志清理、服务监控)、系统管理(如用户管理、磁盘空间检查)等场景。以下从基础准备、核心语法、实战技巧到最佳实践,梳理脚本编程的关键内容。
一、基础准备:环境与工具
在开始编写脚本前,需完成以下准备工作:
- 安装开发工具:确保系统安装
bash、vim等基础工具,可通过以下命令安装:sudo yum groupinstall "Development Tools" sudo yum install bash-completion vim lrzsz wgetbash-completion可提升命令行输入效率,vim是常用的文本编辑器。 - 验证Shell环境:CentOS Stream 8默认使用
bash,可通过echo $SHELL确认,若未使用bash,可通过chsh -s /bin/bash切换。
二、脚本基本结构与执行
-
创建脚本文件:使用文本编辑器(如
vim)创建.sh后缀的文件,例如hello.sh:vim hello.sh输入以下内容(第一行为Shebang,指定解释器):
#!/bin/bash # 输出Hello World echo "Hello, World!"#!/bin/bash:声明使用bash解释器,是脚本的必需行;#:注释符号,用于说明脚本功能。
-
赋予执行权限:脚本需具备可执行权限,使用
chmod命令:chmod +x hello.sh -
运行脚本:通过以下两种方式运行:
- 直接执行(需指定路径):
./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
四、实战技巧:提升脚本实用性
-
调试脚本:使用
bash -x命令查看脚本执行过程,例如:bash -x hello.sh输出会显示每一步命令的执行结果,便于排查错误。
-
错误处理:
- 检查命令返回值:通过
$?获取上一条命令的返回值(0表示成功,非0表示失败),例如:rm /tmp/test.log if [ $? -ne 0 ]; then echo "删除文件失败" fi - 设置
set -e:在脚本开头添加set -e,使脚本在遇到错误时立即退出,避免继续执行导致更严重的问题。
- 检查命令返回值:通过
-
定时任务:使用
crontab配置定时执行脚本,例如:- 编辑当前用户的定时任务:
crontab -e; - 添加以下规则(每天凌晨3点清理日志):
0 3 * * * /path/to/log_clean.sh - 保存后,
cron会自动加载任务。
- 编辑当前用户的定时任务:
五、最佳实践:编写高质量脚本
-
添加描述信息:在脚本开头添加注释,说明脚本功能、作者、创建时间等,例如:
#!/bin/bash # 脚本名称: log_clean.sh # 功能: 清理超过30天的日志文件 # 作者: John # 创建时间: 2025-11-09 -
备份重要数据:修改系统配置文件(如
/etc/sysconfig/network-scripts/ifcfg-eth0)前,先备份:cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak -
刷新环境变量:若脚本中使用了自定义环境变量,需通过
source /etc/profile或. /etc/profile刷新,确保变量生效。 -
使用EPEL仓库:安装额外的软件包(如
wget、git)时,可先添加EPEL仓库:sudo yum install epel-releaseEPEL(Extra Packages for Enterprise Linux)提供了更多常用的软件包。
通过以上基础内容,可快速掌握CentOS Stream 8上的Shell脚本编程技能。结合实际需求,可进一步学习awk(文本处理)、sed(流编辑)、expect(自动化交互)等工具,提升脚本的复杂度与实用性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Stream 8脚本编程基础
本文地址: https://pptw.com/jishu/746319.html
