在CentOS Stream 8上编写Shell脚本是一个强大的技能,可以帮助自动化日常任务和系统管理。以下是一个基本的入门指南,帮助你开始编写和运行Shell脚本。
首先,使用文本编辑器(如vi
或nano
)创建一个新的文件,并添加Shell脚本代码。例如,创建一个名为test.sh
的文件:
#!/bin/bash
echo "Hello, World!"
在CentOS中,需要为Shell脚本文件赋予执行权限。使用以下命令添加执行权限:
chmod +x test.sh
要运行创建的Shell脚本文件,可以使用以下命令:
./test.sh
你应该会看到输出“Hello, World!”。
在脚本中定义和使用变量:
#!/bin/bash
APP_NAME="web_server"
LOG_DIR="/var/log/$APP_NAME"
MAX_SIZE=100
echo "应用程序名称: $APP_NAME"
echo "日志目录大小限制: $MAX_SIZE MB"
使用if
语句进行条件判断:
#!/bin/bash
SERVICE="nginx"
if systemctl is-active --quiet "$SERVICE"; then
echo "$SERVICE 正在运行"
elif [ -f "/usr/sbin/$SERVICE" ]; then
echo "$SERVICE 已安装但未启动"
else
echo "$SERVICE 未安装"
fi
使用for
循环遍历列表或数组:
#!/bin/bash
for LOG_FILE in /var/log/*.log; do
echo "处理文件: $LOG_FILE"
gzip "$LOG_FILE"
done
使用函数来封装脚本逻辑:
#!/bin/bash
function disk_alert() {
local USAGE=$(df -h / | awk 'NR2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt 90 ]; then
echo "警告:根分区使用率超过90%!"
return 1
fi
return 0
}
disk_alert
自动清理超过一定天数的日志文件:
#!/bin/bash
LOG_DIR="/var/log/app_logs"
MAX_DAYS=30
find "$LOG_DIR" -name "*.log" -type f -mtime +$MAX_DAYS -delete
echo "$(date) 已清理超过 $MAX_DAYS 天的日志" >> /var/log/clean.log
监控服务状态并在需要时重启:
#!/bin/bash
SERVICE="httpd"
if ! systemctl is-active --quiet "$SERVICE"; then
systemctl restart "$SERVICE"
echo "$(date) $SERVICE 已重启" >> /var/log/service_monitor.log
fi
使用crontab
配置定时任务:
# 编辑任务列表
crontab -e
# 添加定时规则
# 每天凌晨3点清理日志
0 3 * * * /path/to/log_clean.sh
# 每5分钟检查服务状态
*/5 * * * * /path/to/service_monitor.sh
通过以上步骤,你可以在CentOS Stream 8上编写和运行基本的Shell脚本。根据具体需求,你可以编写更复杂的脚本,用于自动化各种任务和管理系统。