Shell 脚本很多人都会写几行:cd 到目录、跑个循环、grep 一下日志。但一旦脚本要交给别人用、要放进 crontab、要在生产机器上跑,问题就来了——参数带空格就崩、路径里有个空格就删错目录、出错不报还在继续跑、日志没人看得懂。这门课解决的就是这段差距。

先看清缺口在哪

语法层面的东西,比如变量、if、for、函数,找本手册半小时就能翻完。真正卡人的是三块:第一是对 shell 运行环境的理解,比如子 shell 与当前 shell 的区别、管道每段的退出码、引号与转义的边界;第二是命令行工具的深度用法,sed、awk、find、xargs 这些不是会用就行,而是要理解它们处理文本时的字段模型和边界条件;第三是脚本工程化,包括参数解析、错误处理、并发控制、日志与幂等。

如果你写脚本时经常靠「试一下能不能跑」来判断对错,或者脚本改到第三版自己都不敢动,那说明缺的主要是后两块。

这门课主要补什么

课程按生产场景推进,重点不在语法罗列,而在「这段逻辑放在真实环境里会发生什么」。几个典型的方向:

  • 文本处理类任务:从非结构化日志里提取指标、做字段切分与归并、按时间窗口统计。这也是最容易被小看的部分,边界条件(空行、字段缺失、编码、超大文件)才是真正的考点。
  • 批处理与巡检:批量执行远程命令、判断执行结果、汇总输出。这里会涉及退出码语义、set -e 的坑、以及为什么不能只看最后一条命令的返回。
  • 参数与健壮性:getopts 解析、默认值与必填校验、临时文件清理、中断信号处理。脚本一旦要交给别人用,这些都是硬要求。
  • 调度与自动化:放进定时任务后,PATH、工作目录、环境变量都会变,脚本必须自己把前提条件写死,而不是依赖交互式环境。

资料里提到的 100+ 生产案例和 200+ 页文档,价值不在数量,而在于每个案例都对应一类真实故障模式。看的时候建议带着「如果输入变了会怎样」去读,而不是复制粘贴。

怎么练才有效

光看不会。建议每学一个主题,自己重写一遍,并且故意制造异常输入:文件名带空格和换行、日志中间截断、命令不存在、磁盘写满、脚本被 Ctrl+C 打断。能在这几种情况下仍然给出明确报错而不是静默跑偏,才算过关。

另一个有效做法是把脚本当代码管:写注释说明输入输出和副作用,用 shellcheck 过一遍,给关键分支加日志。课程里的案例可以作为对照标准,看看自己写的版本在可读性和容错上差在哪。

看完应该能回答的问题

  • 脚本执行到一半失败,怎么保证不会留下半成品状态?
  • set -e 在什么情况下会失效,为什么不能无脑加?
  • 一条命令的退出码在管道里怎么传递,判断成功与否该看谁?
  • 参数里混入空格、通配符、前导横线时,脚本怎么保证不出错?
  • 脚本放进定时任务后行为变了,排查顺序是什么?
  • 怎么把一个上百行的脚本拆成可测试、可复用的结构?

如果这些问题你现在只能给出大概方向,这门课值得按顺序走一遍。如果已经能清楚回答,可以直接跳到批处理和调度的部分,用案例做查漏。

Shell编程企业级实战

课程详情

课程详情

Shell编程企业级实战课程专为Linux初学者、Linux运维人员、计算机专业在校学生、Linux运维开发工程师设计。

课程亮点

  • 支持售后答疑!
  • 200+页的文档!
  • 100+生产案例!
  • 100+课程课时!
  • 更系统、更全面!

课程目录

  • Shell脚本简介
  • Shell变量基础及深入
  • 条件测试
  • 分支与循环结构
  • break continue exit
  • shell函数
  • shell数组
  • Shell脚本的调试
  • shell脚本开发习惯、规范、制度
  • vim shell开发环境配置
  • Shell三剑客
  • Linux信号处理及跳板机实战应用
  • Expect命令脚本语言实战应用

课程配套教案

课程配套教案共计212页,字数达63618字。

课程目录

01 课程介绍
  01 课程介绍.mp4
02 Shell脚本简介
  01 什么是Shell?.mp4
  02 什么是Shell脚本?.mp4
  03 Shell程序在运维工作中的作用地位?.mp4
  04 Shell脚本语言的种类.mp4
  05 其他运维或开发人员用的脚本语言.mp4
  06 shell脚本与php,perl,python语言的差别?.mp4
  07 常用操作系统的默认Shell.mp4
  08 shell脚本的建立-1.mp4
  09 shell脚本的建立-2.mp4
  10 Shell脚本的执行.mp4
  11 Shell脚本开发基本规范及习惯.mp4
03 条件测试
  01 Shell变量的类型.mp4
  02 环境变量(全局变量).mp4
  03 自定义环境变量(全局变量).mp4
  04 显示与取消环境变量.mp4
  05 定义本地变量-1.mp4
  06 定义本地变量-2.mp4
  07 shell特殊变量-1.mp4
  08 Shell特殊变量实战剖析-2.mp4
  09 bash内部变量.mp4
  10 变量子串的常用操作-1.mp4
  11 变量结尾删除生产实践-2.mp4
  12 拓展:其他变量的替换-3.mp4
  13 变量的数值计算-(())用法-1.mp4
  14 变量的数值计算-let用法-2.mp4
  15 变量的数值计算-expr用法-3.mp4
  16 变量的数值计算-bc用法-4.mp4
  17 变量的数值计算-typeset用法-5.mp4
  18 变量的数值计算-$[]用法-6.mp4
  19 Shell变量的输入.mp4
04 条件测试
  01 条件测试语法.mp4
  02 文件测试操作符.mp4
  03 字符串测试操作符.mp4
  04 整数二元比较操作符.mp4
  05 逻辑操作符.mp4
  06 文件测试案例.mp4
  07 字符串测试案例.mp4
  08 整数测试案例.mp4
  09 test命令测试案例.mp4
  10 逻辑操作符案例.mp4
05 分支与循环结构
  01 if条件句语法说明.mp4
  02 if条件句生产脚本实践-1.mp4
  03 监控内存大小,低于阀值进行邮件报警-2.mp4
  04 if条件句生产脚本实践-3.mp4
  05 开发Shell脚本监控MySQL服务实战案例-4.mp4
  06 开发Shell脚本监控MySQL服务实战案例-5.mp4
  07 开发Shell脚本监控MySQL服务实战案例-6.mp4
  08 开发Shell脚本监控MySQL服务实战案例-7.mp4
  09 多判断条件if语句讲解.mp4
  10 开发Shell脚本监控WEB服务实战案例-1.mp4
  11 开发Shell脚本监控WEB服务实战案例-2.mp4
  12 开发Shell脚本监控WEB服务实战案例-3.mp4
  13 如何查看远端web服务是否开启tcp 80端口?.mp4
  14 case结构条件句语法.mp4
  15 case结构条件句范例-1.mp4
  16 case结构条件句范例-2.mp4
  17 利用case语句开发WEB服务启动脚本-3.mp4
  18 使用函数技术改进WEB服务启动脚本-4.mp4
  19 构建MySQL多实例环境.mp4
  20 开发生产环境mysql多实例启动的脚本.mp4
  21 当型和直到型循环语法.mp4
  22 当型和直到型循环基本范例-1.mp4
  23 当型和直到型循环基本范例-2.mp4
  24 当型和直到型循环基本范例-3.mp4
  25 当型和直到型循环基本范例-4.mp4
  26 当型和直到型循环生产案例-1.mp4
  27 当型和直到型循环生产案例-2.mp4
  28 当型和直到型循环生产案例-3.mp4
  29 for循环结构语法.mp4
  30 for循环结构基础案例.mp4
  31 linux下批量修改文件名的生产案例-1.mp4
  32 for循环打印99乘法表-2.mp4
  33 MySQL分库分表备份脚本生产案例-3.mp4
  34 for循环结构深入案例-4.mp4
  35 for循环结构高级案例-1.mp4
  36 for循环结构高级案例-2.mp4
  37 for循环结构高级案例-3.mp4
  38 扩展:linux系统产生随机数的6种方法.mp4
06 break continue exit
  01 break continue exit对比.mp4
  02 break命令生产案例应用.mp4
  03 continue命令生产案例应用.mp4
  04 exit命令生产案例应用.mp4
07 shell函数
  01 Shell函数语法.mp4
  02 Shell函数执行.mp4
  03 开发脚本建立两个函数并调用执行.mp4
  04 函数体和执行脚本分离实战.mp4
  05 函数传参生产案例-1.mp4
  06 函数传参生产案例-2.mp4
08 shell数组
  01 Shell数组介绍.mp4
  02 数组定义与增删改查-1.mp4
  03 数组定义与增删改查-2.mp4
  04 数组生产实践案例-1.mp4
  05 数组生产实践案例-2.mp4
  06 数组生产实践案例-3.mp4
09 Shell脚本的调试
  01 if条件句缺少if结尾关键字.mp4
  02 循环结构体中缺少关键字错误.mp4
  03 成对的符号落单所导致的错误.mp4
  04 dos2unix命令处理Shell脚本.mp4
  05 echo命令调试Shell脚本.mp4
  06 bash命令调试Shell脚本.mp4
  07 set命令调试部分脚本内容.mp4
  08 扩展:Shell调试小结.mp4
10 shell脚本开发习惯、规范、制度
  01 Shell脚本命名规范.mp4
  02 代码风格规范.mp4
  03 优秀的开发习惯.mp4
11 vim shell开发环境配置
  01 shell开发环境配置.mp4
12 Shell三剑客
  01 grep命令格式与选项介绍.mp4
  02 grep经典案例-1.mp4
  03 grep经典案例-2.mp4
  04 sed编辑器介绍.mp4
  05 sed命令格式、命令选项详解.mp4
  06 sed命令进行文本替换.mp4
  07 sed使用寻址对特定行进行编辑.mp4
  08 sed命令删除行.mp4
  09 sed命令插入和附加文本.mp4
  10 sed命令修改行.mp4
  11 sed命令逐字符转换.mp4
  12 sed命令处理文件.mp4
  13 模式空间和保持空间介绍.mp4
  14 模式空间和保持空间命令.mp4
  15 sed常见操作.mp4
  16 awk介绍.mp4
  17 awk对字段(列)的提取.mp4
  18 awk命令选项详解.mp4
  19 awk对记录(行)的提取.mp4
  20 awk对字符串提取.mp4
  21 awk程序的优先级.mp4
  22 awk定义数组.mp4
  23 awk运算.mp4
  24 awk环境变量.mp4
  25 awk流程控制.mp4
  26 awk练习.mp4
13 Linux 信号处理及跳板机实战应用
  01 列出linux系统的信号名称.mp4
  02 trap使用信号的方法.mp4
  03 Shell脚本开发跳板机实战.mp4
14 Expect 命令脚本语言实战应用
  01 什么是Expect?.mp4
  02 Expect程序工作流程与部署.mp4
  03 Expect语法-spawn.mp4
  04 Expect语法-expect.mp4
  05 Expect语法-exp_send和send.mp4
  06 Expect语法-exp_continue.mp4
  07 Expect语法-send_user.mp4
  08 Expect语法-exit.mp4
  09 Expect变量.mp4
  10 Expect关键字-eof.mp4
  11 Expect关键字-timeout.mp4
  12 Expect实现批量分发hosts文件.mp4
  13 Expect实现批量分发ssh密钥文件.mp4
  14 Expect实现批量查看客户机的负载、内存.mp4
15 结课测试
  01 结课测试