shell脚本
2026-07-03
运维
00

目录

第一章:Shell脚本的作用与运维价值
1.1 Shell是什么
1.2 Shell脚本的运维核心场景
第二章:Shell入门基础知识
2.1 脚本文件规范
2.1.1 首行解释器(Shebang)
2.1.2 文件命名规范
2.1.3 执行脚本的三种方式
2.1.4 权限配置(生产标准)
2.2 注释规范
2.3 输出命令

第一章:Shell脚本的作用与运维价值

1.1 Shell是什么

Shell是Linux系统的命令解释器,是用户与操作系统内核之间交互的桥梁。简单来说,Shell接收用户输入的命令,将其交给内核执行,并将结果返回给用户

我们可以把Shell想象成一个翻译官:你用人类语言(命令)告诉它“你想做什么”,它翻译成计算机能理解的指令交给内核执行,再把结果翻译回来告诉你。没有Shell,你只能面对黑乎乎的底层系统调用接口,效率低效

在Linux世界里,提供了许多不同类型的Shell,每一种都有其独特的特点和适用场景

主流Shell类型对比:

Shell类型特点默认系统
bash功能最全面,脚本兼容性好,行业标准CentOS/RHEL/Fedora默认
sh早期标准,功能较少,bash的子集被bash兼容替代
zsh交互体验优秀,插件丰富,脚本兼容bashmacOS默认(Catalina后)

生产环境选择: 绝大多数企业服务器使用bash,本文章基于bash编写,因为bash兼容性好、生态成熟、所有Linux发行版都预装,你写的脚本可以在任何服务器上运行,不需要额外安装依赖

需要注意的是,有些老旧系统上/bin/sh是一个简化版的Shell,不支持bash的高级特性(如数组、‘[[]]’条件、字符串操作等)。为了保险起见,脚本的第一行始终写成#!/bin/bash

1.2 Shell脚本的运维核心场景

  1. 批量处理: 同时创建/删除100个用户、批量修改1000台服务器配置。比如公司来了50个新员工,需要给每个人创建账号、设置密码、配置家目录,手工操作需要一上午,而一个几十行的脚本几分钟就能完成
  2. 日志分析: 从GB级日志中提取错误信息、统计API访问次数。Nginx每天会产生几百MB到几GB的访问日志,用脚本结合awk可以快速统计出访问量最高的IP、报错最多的接口
  3. 服务监控: 每5分钟检查Nginx是否存活、磁盘是否超过90%。配合crontab定时任务,Shell脚本可以持续监控服务器健康状态,发现问题立即告警
  4. 自动化部署: 一键安装LAMP环境、自动更新代码版本。以前需要半天手动完成的部署工作,脚本跑几分钟搞定,而且不会漏掉任何步骤

用一句话总结就是:能用Shell脚本做的事,就不要手工去做。这是运维提高效率的第一工具,脚本不仅快,还能避免认为操作失误,每执行一次都是标准化的结果

第二章:Shell入门基础知识

2.1 脚本文件规范

2.1.1 首行解释器(Shebang)

bash
展开代码
#!/bin/bash # 表示使用/bin/bash解释器执行脚本 # 如果没有这行,Linux会使用默认shell(通常也是bash)

这行代码基本是必写的。因为你可能会把脚本交给不同的人运行,有人用zsh,有人用sh,千奇百怪的默认Shell可能会导致脚本行为不一致,比如zsh的某些语法就和bash不同,你的脚本在bash下跑得好好的,到了zsh下就报错了

写上#!/bin/bash就强制使用bash解释器,确保脚本在任何环境下的行为都一致

2.1.2 文件命名规范

  • 扩展名: .sh
  • 命名: 小写字母+下划线,例如:deplay_app.sh
  • 禁止: 脚本名包含空格或特殊字符(否则执行时需要添加引号,麻烦且容易出错)

好的命名习惯:用动词开头说明功能,比如create_user.sh会比user.sh更直观;backup_db.sh会比backup.sh更能体现具体用途。当你目录下有几十个脚本的时候,规范的命名能让你快速找到想要的脚本

2.1.3 执行脚本的三种方式

执行方式命令特点适用场景
方式一bash script.sh直接运行,无需执行权限调试开发
方式二./script.shchmod +x script.sh先给权限生产部署
方式三source script.sh. script.sh在当前shell环境执行加载环境变量

关键区别

bash
展开代码
# 方式一、二:启动子shell执行,脚本中的变量不会影响当前shell # 方式三:在当前shell执行,变量会保留到当前shell bash test.sh source test.sh # 等同 .test.sh

其中的区别,可以想象下shell是独立的房间,你进去做了什么事,出来后就都消失了(变量不保留,工作目录不保留)。而source是在你当前所在的房间直接操作,所有改变都会留下

所以当你需要让脚本修改当前环境(比如设置JAVA_HOME、添加快捷命令),就必须用source;如果只是执行一个单独的任务(如备份文件),用前两种方式即可

2.1.4 权限配置(生产标准)

bash
展开代码
chmod 755 script.sh # 所有者读写执行,组合其他人读执行 chmod +x script.sh # 给所有人增加执行权限

权限非常重要,如果你的脚本的权限为777(所有人都能修改),那一旦被植入恶意代码(如rm -rf /*),那就有点好玩了[dogo],生产环境安全的第一道防线就是权限控制

安全提醒: 生产环境不要给脚本777权限!755就足够了

2.2 注释规范

bash
展开代码
#!/bin/bash #============================================= # 作者:您的名字 # 日期:2024-01-01 # 功能:批量创建系统用户 # 版本:v1.0 # 注意事项:需要root权限运行,uid从1001开始 #============================================= # 单行注释使用# :<<BLOCK 多行注释区块 可以写多行说明 BLOCK

重要提醒: 一段时候后回头看自己写的脚本,如果没有注释,很可能看不懂自己在写什么(或者发给AI问问[dogo])。一个合格的脚本头部至少应该包含:作者、日期、功能、使用方法、注意事项

对于多行注释,:<<EOF格式的好处就是可以写大段说明文档而不影响脚本执行,适合写在函数前面说明函数的用户和参数含义

2.3 输出命令

输出的脚本的“嘴巴”,没有输出的脚本就是黑盒子,你完全不知道它内部究竟发生了什么,所以,脚本的每一步关键操作都必须要有输出信息

本文作者:zzz

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!