公司博客 // 2026-08-24 · BY IDCBOT

Shell脚本入门教程:用自动化脚本解放服务器日常运维

每天重复敲同样的命令、手动做备份和检查?这些都该交给Shell脚本自动完成。Shell脚本是Linux运维自动化的基础,不需要多深的编程功底,掌握基本语法就能写出实用的自动化脚本。本文带你入门。

一、第一个脚本

新建 hello.sh:

#!/bin/bash
echo "Hello, 服务器!"
echo "当前时间: $(date)"

第一行 #!/bin/bash 是”shebang”,告诉系统用bash执行。赋予执行权限并运行:

chmod +x hello.sh
./hello.sh

二、变量

name="服务器"
count=5
echo "名字是 $name,数量是 $count"
# 命令结果存入变量
today=$(date +%F)
files=$(ls | wc -l)

注意:等号两边不能有空格(bash的坑),用变量时加 $。

三、条件判断

if [ -f "/etc/nginx/nginx.conf" ]; then
    echo "Nginx配置存在"
else
    echo "配置不存在"
fi

# 常用判断:-f文件存在 -d目录存在 -z字符串为空
# 数值比较:-eq等于 -gt大于 -lt小于

四、循环

# for循环:批量处理
for f in *.log; do
    echo "处理 $f"
    gzip "$f"
done

# 遍历列表
for site in site1 site2 site3; do
    echo "备份 $site"
done

五、函数

log() {
    echo "[$(date '+%F %T')] $1"
}
log "备份开始"      # 调用

六、实战脚本1:自动备份

#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR="/backup"
log() { echo "[$(date '+%T')] $1"; }

log "开始备份数据库"
mysqldump -u root -p'密码' --all-databases | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"

log "备份网站文件"
tar -czf "$BACKUP_DIR/www_$DATE.tar.gz" /www/wwwroot/

log "清理7天前的备份"
find "$BACKUP_DIR" -name "*.gz" -mtime +7 -delete

log "备份完成"

配合crontab每天自动跑(参考crontab篇),配合rclone上传异地(参考rclone篇),就是完整的自动备份体系。

七、实战脚本2:简单监控

#!/bin/bash
# 检查磁盘使用率,超过80%告警
USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -gt 80 ]; then
    echo "警告:磁盘使用率 ${USAGE}%" 
    # 这里可加发送TG/邮件通知的命令
fi

八、写好脚本的几个习惯

  • 加日志输出:脚本在做什么、结果如何,出问题好排查;
  • 用绝对路径:脚本被cron执行时环境干净,相对路径易出错(参考crontab篇);
  • 加错误处理:开头加 set -e(出错即停)避免带病继续;
  • 变量加引号:"$var" 防止路径含空格出问题;
  • 先测试再上生产:尤其含删除操作的脚本,先小范围验证。

结论

Shell脚本是运维自动化的基石:变量、条件、循环、函数几个基础语法,就能把备份、监控、批处理等重复劳动自动化。配合定时任务,让服务器”自己照顾自己”。不用追求写得多高级,能解决实际问题就是好脚本。在你的服务器上从一个备份脚本开始练手,你会逐渐爱上”写一次、自动跑一辈子”的爽感。

// LEAVE A COMMENT

Your email address will not be published. Required fields are marked *