【软件实施】Linux系统Shell脚本教程

第一章 Shell脚本运维零基础实战(自动化核心入门)

1.1 Shell脚本生产价值与运维定位

Shell是Linux运维专属自动化语言,无需复杂编程基础,主打简单、高效、落地 。企业运维90%的轻量化自动化工作(自动备份、自动清理日志、自动巡检、服务监控、批量操作)全部依靠Shell脚本实现,是零基础运维进阶的核心分水岭

相比于手动敲命令:手动操作耗时、易出错、无法持续复用;Shell脚本一次编写、永久复用、定时执行、批量生效,是运维摆脱重复劳作、实现自动化上岗的必备技能。

1.2 脚本运行原理与生产规范

1.2.1 脚本解释器

系统默认解释器为bash,所有运维脚本统一首行声明,固定标准:#!/bin/bash,作用是指定脚本由bash解释器执行,避免系统默认解释器导致语法报错。

1.2.2 生产脚本命名规范

  1. 脚本后缀统一为 .sh,辨识度高、行业通用;

  2. 命名语义化:backup_project.sh、clean_log.sh、server_check.sh,禁止随意命名;

  3. 生产脚本统一存放目录:/usr/local/scripts/,集中管理、方便调用;

  4. 所有脚本必须添加执行权限,禁止无权限运行。

1.2.3 脚本运行三种方式(生产区分使用)

bash 复制代码
# 方式1:bash 脚本名(无需执行权限,测试调试首选)
bash test.sh
# 方式2:sh 脚本名(通用兼容,双系统均可使用)
sh test.sh
# 方式3:./脚本名(必须有执行权限,生产正式运行标准)
chmod +x test.sh
./test.sh

1.2.4 生产脚本通用禁忌

  1. 脚本内所有路径必须使用绝对路径,规避定时任务执行失效问题;

  2. 禁止脚本内使用777权限、禁止裸删文件命令;

  3. 重要操作脚本必须加日志输出,方便故障回溯;

  4. 脚本编写完成先调试,再放入定时任务,避免线上事故。

第二章 Shell脚本基础语法(运维专用·极简落地)

2.1 变量定义与实战使用

运维脚本无需复杂变量,仅需掌握自定义变量、系统内置变量,满足100%运维场景。

2.1.1 自定义变量

bash 复制代码
#!/bin/bash
# 定义变量(等号左右无空格,严格规范)
PROJECT_DIR="/opt/project"
BACKUP_DIR="/home/backup"
DATE=$(date +%Y%m%d)

# 调用变量
echo "项目路径:$PROJECT_DIR"
echo "备份日期:$DATE"

2.1.2 运维高频系统内置变量

$0:脚本本身名称

1、2:脚本后接第一、第二个传参(批量运维核心)

$#:传参总个数

$$:脚本运行PID

$?:上一条命令执行返回状态(0成功、非0失败,排错必备)

bash 复制代码
#!/bin/bash
echo "脚本名称:$0"
echo "第一个参数:$1"
echo "执行状态:$?"

2.2 条件判断语句(脚本智能判断核心)

生产脚本核心用途:判断目录是否存在、服务是否启动、文件是否存在、磁盘是否爆满。

2.2.1 文件目录判断(最高频)

bash 复制代码
#!/bin/bash
# 判断目录不存在则创建
if [ ! -d "/opt/project/log" ];then
  mkdir -p /opt/project/log
fi

# 判断文件存在则删除
if [ -f "/opt/project/test.log" ];then
  rm -f /opt/project/test.log
fi

-d 判断目录、-f 判断文件、! 取反(不存在/不成立)

2.2.2 服务状态判断(监控必备)

bash 复制代码
#!/bin/bash
# 判断Nginx是否运行,未运行则重启
ps -ef | grep nginx | grep -v grep
if [ $? -ne 0 ];then
  systemctl restart nginx
  echo "Nginx服务异常,已重启!"
fi

2.3 循环语句(批量运维核心)

for循环是运维批量操作神器:批量创建文件、批量删除日志、批量修改配置、批量巡检主机。

bash 复制代码
#!/bin/bash
# 批量清理30天过期日志
for file in $(find /var/log -name "*.log" -mtime +30)
do
  rm -f $file
  echo "已清理过期日志:$file"
done

第三章 运维高频Shell实战脚本(可直接上线复用)

本章所有脚本生产直接可用、双系统兼容,无需修改可直接放入定时任务,覆盖备份、清理、巡检、监控四大核心场景。

3.1 项目自动备份脚本(企业标准)

功能:自动按日期打包备份、避免覆盖、输出备份日志、容错处理

bash 复制代码
#!/bin/bash
# 环境变量配置
PROJECT_PATH="/opt/project"
BACKUP_PATH="/home/backup"
DATE=$(date +%Y%m%d)
BACKUP_FILE="$BACKUP_PATH/project-$DATE.tar.gz"

# 创建备份目录
mkdir -p $BACKUP_PATH

# 打包备份
tar -zcvf $BACKUP_FILE $PROJECT_PATH >/dev/null 2>&1

# 判断备份结果
if [ $? -eq 0 ];then
  echo "$DATE 项目备份成功,文件:$BACKUP_FILE" >> $BACKUP_PATH/backup_log.log
else
  echo "$DATE 项目备份失败" >> $BACKUP_PATH/backup_error.log
fi

3.2 自动清理日志脚本(磁盘防爆满)

功能:自动清理15天过期日志、临时文件,释放磁盘空间,杜绝磁盘爆满故障

bash 复制代码
#!/bin/bash
# 清理15天过期日志与临时文件
find /var/log /tmp /opt/project/log -name "*.log" -mtime +15 -delete
find /tmp -type f -mtime +15 -delete

echo "$(date +%Y-%m-%d) 过期日志清理完成" >> /var/log/clean_log.log

3.3 服务器日常巡检脚本(自动化巡检)

功能:自动检测磁盘使用率、内存负载、端口状态、系统报错,输出巡检报告

bash 复制代码
#!/bin/bash
LOG_FILE="/var/log/server_check.log"
echo "==========$(date +%Y-%m-%d) 服务器巡检报告==========" >> $LOG_FILE
echo "【磁盘空间状态】" >> $LOG_FILE
df -h | grep -v tmpfs >> $LOG_FILE
echo "【内存负载状态】" >> $LOG_FILE
free -h >> $LOG_FILE
echo "【系统报错信息】" >> $LOG_FILE
grep -i error /var/log/messages >> $LOG_FILE
echo "==================================================" >> $LOG_FILE

3.4 服务宕机自动重启脚本(线上保活)

适配Nginx、Java、Redis、MySQL等所有服务,实现服务宕机自动拉起,保障业务不中断

bash 复制代码
#!/bin/bash
# 监控Nginx服务,异常自动重启
SERVICE_NAME="nginx"
ps -ef | grep $SERVICE_NAME | grep -v grep
if [ $? -ne 0 ];then
  systemctl restart $SERVICE_NAME
  echo "$(date +%Y-%m-%d) $SERVICE_NAME 服务宕机,已自动重启" >> /var/log/service_monitor.log
fi

第四章 脚本定时自动化落地(Crontab+Shell联动)

4.1 脚本标准化部署流程

1、统一上传脚本至 /usr/local/scripts/ 目录;

2、添加执行权限:chmod +x *.sh;

3、手动执行调试,确认无报错;

4、写入crontab定时任务,实现全自动运行。

4.2 生产定时任务落地配置

bash 复制代码
# 每日凌晨2点自动备份项目
0 2 * * * /usr/local/scripts/backup_project.sh
# 每日凌晨3点自动清理日志
0 3 * * * /usr/local/scripts/clean_log.sh
# 每小时自动巡检服务器
0 * * * * /usr/local/scripts/server_check.sh
# 每10分钟监控服务状态
*/10 * * * * /usr/local/scripts/nginx_monitor.sh

第五章 Shell脚本高频报错与生产避坑指南

5.1 脚本手动执行成功,定时任务执行失败

根因 :定时任务无系统环境变量、脚本使用相对路径、命令未写绝对路径

解决方案 :脚本内所有路径、命令全部绝对路径,脚本头部导入环境变量 source /etc/profile

5.2 脚本权限不足无法执行

根因 :未添加执行权限、文件归属错误

修复:chmod +x 脚本名 && chown root:root 脚本名

5.3 循环遍历文件为空、执行无效果

根因 :路径错误、文件不存在、语法空格不规范

修复:严格检查路径,shell语法中括号、判断语句必须保留空格

5.4 脚本输出乱码、格式错误

根因 :Windows编辑脚本上传导致换行符异常

修复 :安装dos2unix,转换脚本格式 dos2unix 脚本名

第六章 双系统Shell脚本兼容差异(CentOS/Ubuntu)

绝大多数基础脚本双系统通用,仅以下细微差异需要注意:

1、系统服务命令:CentOS兼容旧service命令,Ubuntu仅支持systemctl;

2、日志路径差异:安全日志路径不同,巡检脚本需区分配置;

3、软件安装命令差异,自动化安装脚本需区分系统;

4、Ubuntu对脚本语法、空格、换行符校验更严格,需更规范编写。

相关推荐
2601_962304911 小时前
把出片接进自动化流水线:2026 年批量 AI 视频生成工具的脚本契约与同类项目对照
运维·人工智能·自动化
曹牧1 小时前
C#:文本文件读取
服务器·前端·c#
Ruiery1 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
分支预测失败1 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
GeW1 小时前
RHCE学习拿证计划:锁定核心考点,实现备考效率最大化
linux
我命由我123451 小时前
Photoshop - Photoshop 把两个 PSD 文件合并
学习·ui·职场和发展·产品运营·产品经理·学习方法·photoshop
snow@li1 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
实战派K8S&DB2 小时前
《基于 Dify + FastAPI + PyTiDB 搭建大模型驱动的 TiDB 智能运维 Agent》
运维·数据库·分布式·云原生·tidb·fastapi
苏生Susheng2 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施