非常游戏网
Linux下常用Shell脚本模版 自动化运维必备

Linux下常用Shell脚本模版 自动化运维必备

2026-04-09系统教程223506

基础Shell运维脚本模版需包含:#!/bin/bash、参数校验[[$# -lt 1]]、set -e、exec >>/var/log/yourscript.log 2>&1、getopts解析参数、rsync用--delete-after/--exclude/-avz、cron中显式PATH和绝对路径。

直接用就行,但别跳过权限和路径校验——90%的脚本失败都卡在这两步。

如何写一个带参数检查和日志记录的基础Shell模版

运维脚本最怕执行一半出错却没提示,也怕误操作影响生产环境。所以模版必须包含:$# 参数计数、set -e 异常退出、date 时间戳日志。

  • 开头加 #!/bin/bash,别用 sh ——很多系统里 sh 不支持 [[ 和数组
  • [[ $# -lt 1 ]] 判断参数,比 [ $1 = "" ] 更安全(空格、特殊字符不崩)
  • 日志建议写到 /var/log/yourscript.log,而不是当前目录——脚本可能被任意路径调用
  • 加一句 exec >> /var/log/yourscript.log 2>&1,后续所有 echo 和命令错误都会自动落盘

为什么用 getopts 而不是手动解析 $1 $2

当脚本要支持 -f /path -v --debug 这类混合参数时,手撕 case "$1" 容易漏掉短选项连写(如 -fv)、忽略冒号后必填参数报错逻辑,getopts 原生处理这些。

  • getopts "f:v" opt 中的 v 后没冒号 → 表示开关型参数;f: 后有冒号 → 表示必须跟值,否则触发 ? 分支
  • 记得在循环外加 OPTIND=1,否则函数内多次调用 getopts 会读错位置
  • getopts 不支持长选项(--verbose),真需要就换 getopt(注意是带 p 的外部命令,非内置)

rsync 自动化同步脚本里最容易被忽略的三个开关

运维最常用同步场景,但默认行为常导致“看似成功,实则漏文件”或“删错目录”。

猫目

AI工具导航与智能应用推荐

  • --delete-after--delete 安全:先传完再删,断点续传时不误删目标端已有文件
  • 必须加 --exclude='.git' --exclude='*.tmp',否则临时文件或开发残留进生产目录
  • -avzv(verbose)不能省——没它你根本不知道哪些文件被跳过(比如权限不足、硬链接跨文件系统)
  • 额外提醒:rsync 源路径末尾加不加 / 语义完全不同:/data/ 同步内容,/data 同步目录本身

定时任务跑脚本前必须验证的三件事

cron 环境和交互式 Shell 差异极大,PATH、HOME、甚至 ~ 展开都可能失效。

  • 在脚本开头显式写死关键路径:PATH="/usr/local/bin:/usr/bin:/bin",别依赖 ~/.bashrc
  • 所有路径用绝对路径:/opt/app/deploy.sh,别写 ./deploy.sh~/deploy.sh
  • 测试 cron 环境:临时加一行 * * * * * env > /tmp/cron_env.txt,对比你手动执行 env 的输出

真正难的不是写完脚本,而是让同一个脚本在不同机器、不同用户、不同调度方式下行为一致——多打两行路径和环境变量,省去半夜爬起来查日志的力气。