CentOS Stream 8脚本编程基础指南
CentOS Stream 8作为RHEL的滚动更新发行版,其脚本编程以Shell脚本为核心,适用于自动化日常任务(如日志清理、服务监控)、系统管理(如用户管理、磁盘空间检查)等场景。以下从基础准备、核心语法、实战技巧到最佳实践,梳理脚本编程的关键内容。
在开始编写脚本前,需完成以下准备工作:
bash、vim等基础工具,可通过以下命令安装:sudo yum groupinstall "Development Tools"
sudo yum install bash-completion vim lrzsz wget
bash-completion可提升命令行输入效率,vim是常用的文本编辑器。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(无需权限,但需指定解释器)。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!
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
# 遍历列表
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
count=1
while [ $count -le 5 ]; do
echo "循环次数: $count"
((count++)) # 数值递增
done
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;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-release
EPEL(Extra Packages for Enterprise Linux)提供了更多常用的软件包。
通过以上基础内容,可快速掌握CentOS Stream 8上的Shell脚本编程技能。结合实际需求,可进一步学习awk(文本处理)、sed(流编辑)、expect(自动化交互)等工具,提升脚本的复杂度与实用性。