查漏补缺:你写的 Shell 脚本为什么总像“一次性玩具”

很多转岗做运维或后端的人,对 Shell 的认知停留在“敲几条命令、拼个管道”。真到写自动化脚本时,常见的缺口是:不懂父子进程怎么派生,导致变量在子进程里死活取不到值;分不清单引号和双引号的展开时机,转义字符乱加一通;脚本里全写绝对路径和死命令,换个环境就跑崩。这门课解决的就是这种“能写但写不明白”的问题。它不教你花哨的工具链,而是从 bash 的底层运行机制切入,把配置文件加载顺序、别名生效范围、进程派生原理这些容易被略过的地基重新打牢。适合已经熟悉基本 Linux 命令操作,但没系统学过 bash 原理、写脚本全靠复制粘贴的学习者。

建议先看哪几块:从配置加载到进程派生

资料按基础到进阶排布,别按顺序死磕。建议先啃“bash 相关配置文件和别名”以及“bash 的父子进程”这两块。很多人改了环境变量不生效,就是因为不知道交互式登录和非交互式加载的配置文件不同。看完这两节,你要能理清 .bashrc 和 .bash_profile 的区别。接着重点看“产生子进程的四种方式”和“变量定义与命令替换”,这是 Shell 从命令行走向脚本化的关键转折。配套练习上,别光看视频,自己开终端把产生子进程的几种方式敲一遍,用 export 导出变量后,在子进程中验证能否读取,再试着用反引号和 $() 两种方式做命令替换,对比输出差异。

学完能独立做什么:写出规范且环境健壮的脚本

学完这套机制,你该能独立写出不依赖特定路径、变量作用域清晰的健壮脚本。比如写个批量处理日志的脚本,知道怎么定义局部变量,知道何时该加双引号防止路径带空格解析报错,知道 echo 输出带转义字符时怎么配合参数正确显示。资料里的“编写第一个脚本和执行脚本的方法”配合“取消变量与元字符”是很好的练习素材:照着写一个带参数输入、内部做命令替换、最后清理临时变量的完整流程。练习时强制要求自己给关键行写注释,别再写通篇无注释的流水账。把这些基础吃透,以后遇到别人写的复杂部署脚本,你也能一眼看懂它的变量传递逻辑和进程结构,而不是对着屏幕瞎猜。

课程目录

1-1 [shell编程基础] 介绍shell编程 (01:10:03)
1-2 [shell编程基础] shell编程常识和规范-bash的产生 (01:17:00)
1-3 [shell编程基础] shell里的bash详解 (46:10)
1-4 [shell编程基础] bash相关配置文件和别名 (01:08:27)
1-5 [shell编程基础] bash的父子进程. (31:33)
1-6 [shell编程基础] rz命令和进程类型和父子进程案例 (01:04:32)
1-7 [shell编程基础] 编写第1个shell脚本和执行脚本的方法 (01:02:32)
1-8 [shell编程基础] 产生子进程的4种方式-变量定义和使用-命令替换 (52:44)
1-9 [shell编程基础] 取消变量-元字符-转义字符-单引号和双引号-echo命令 (01:15:07)
1-10 [shell编程基础] printf和read命令使用 (46:32)
1-11 [shell编程基础] shell语法解析过程-创建用户脚本分析和实现 (01:14:51)
1-12 [shell编程基础] 用户脚本回顾-set-env-export命令-PATH变量 (38:56)
1-13 [shell编程基础] 位置变量-basename-random随机数-wc命令 (01:05:03)
1-14 [shell编程基础] 位置变量练习-find和ls和wc命令使用 (21:24)
1-15 [shell编程基础] for循环讲解和位置变量 (53:12)
1-16 [shell编程基础] shell判断之&&和||使用 (41:35)
1-17 [shell编程基础] here document和lftp使用 (51:07)
1-18 [shell编程基础] 企业级shell案例及规范 (21:36)
1-19 [shell编程基础] mysql安装-socket介绍-here-document (01:17:41)
1-20 [shell编程基础] shell里对mysql数据库操作及练习 (59:44)
1-21 [shell编程基础] lftp脚本案例分析 (48:49)
1-22 [shell编程基础] shell对mysql数据库案例操作 (24:31)
1-23 [shell编程基础] 文件查找find案例-位置变量-for循环 (51:20)
2-1 [数学运算和数组、文本处理] 数值运算和数值比较-小数计算-bc-案例分析 (01:00:25)
2-2 [数学运算和数组、文本处理] 整数的计算和比较案例-小数的比较讲解 (35:03)
2-3 [数学运算和数组、文本处理] bc判断小数-date命令时间计算 (01:00:15)
2-4 [数学运算和数组、文本处理] array数组-点歌程序-作业 (35:53)
2-5 [数学运算和数组、文本处理] 点歌程序和放学脚本案例分析 (54:01)
2-6 [数学运算和数组、文本处理] 关联数组 (28:08)
2-7 [数学运算和数组、文本处理] 关联数组作业-seq命令 (38:00)
2-8 [数学运算和数组、文本处理] 文本处理命令tr-seq-sort (57:03)
2-9 [数学运算和数组、文本处理] 文件处理命令-uniq-sort-cut. (33:56)
2-10 [数学运算和数组、文本处理] 配置ip地址 (01:11:25)
2-11 [数学运算和数组、文本处理] 练习题目讲解和抽学生回答问题脚本 (01:13:24)
2-12 [数学运算和数组、文本处理] xferlog日志分析 (50:36)
2-13 [数学运算和数组、文本处理] join-paste-split和双色球及ssh日志分析作业 (01:29:21)
2-14 [数学运算和数组、文本处理] 综合复习扩展-函数-while-case-read (56:07)
2-15 [数学运算和数组、文本处理] 双色球和点歌程序案例分析 (01:21:06)
2-16 [数学运算和数组、文本处理] 各种括号的使用-单圆括号-双圆括号-中括号-大括号等 (01:01:13)
2-17 [数学运算和数组、文本处理] 单引号和双引号和反引号-权限-文件类型-故事-1 (45:37)
2-18 [数学运算和数组、文本处理] 单引号和双引号和反引号-权限-文件类型-故事-2 (42:44)
3-1 [条件测试和结构化语句] 条件判断语句 (47:52)
3-2 [条件测试和结构化语句] 整数和浮点数比较判断-获取变量长度 (01:16:16)
3-3 [条件测试和结构化语句] 阿里巴巴和40大盗-密码判断 (54:33)
3-4 [条件测试和结构化语句] 判断密码长度和复杂性脚本分析-1 (34:26)
3-5 [条件测试和结构化语句] 判断密码长度和复杂性脚本分析-2. (34:34)
3-6 [条件测试和结构化语句] 双中括号和双圆括号的组合运算 (57:28)
3-7 [条件测试和结构化语句] if单分支-双分支-多分支案例 (01:36:19)
3-8 [条件测试和结构化语句] if嵌套案例-exit (33:16)
3-9 [条件测试和结构化语句] for循环-扫描整个局域网 (59:04)
3-10 [条件测试和结构化语句] 扫描局域网脚本分析-后台运行原理分析 (01:18:50)
3-11 [条件测试和结构化语句] 扫描和监控脚本-web-mysql-ftp (39:10)
4-1 [while循环和case语句、函数] while循环和crontab计划任务 (01:24:50)
4-2 [while循环和case语句、函数] while循环判断用户类型 (38:28)
4-3 [while循环和case语句、函数] ftp服务器监控脚本分析 (01:18:39)
4-4 [while循环和case语句、函数] ftp日志分析实现案例和过程 (01:26:37)
4-5 [while循环和case语句、函数] while循环-猜唐僧紫金钵钵的价格 (33:09)
4-6 [while循环和case语句、函数] case语句使用及案例 (41:38)
4-7 [while循环和case语句、函数] 函数 (35:14)
4-8 [while循环和case语句、函数] 函数的计算案例分析-return返回值-local变量作用域 (01:16:08)
5-1 [正则表达式] 正则表达式和grep-1 第一段 (35:16)
5-2 [正则表达式] 正则表达式和grep-1 第二段 (34:54)
5-3 [正则表达式] grep命令-2 (49:13)
5-4 [正则表达式] grep过滤ip地址正则的使用 (58:04)
5-5 [正则表达式] grep里的网站URL的正则使用 (22:09)
5-6 [正则表达式] grep里的邮箱的正则和网址URL的正则 (18:37)
5-7 [正则表达式] 网络URL正则和总结-配置多个ip (59:29)
6-1 [sed命令使用] sed-1 (38:44)
6-2 [sed命令使用] sed-2 (01:12:27)
6-3 [sed命令使用] sed-修改ip地址脚本 (01:49:30)
6-4 [sed命令使用] sed-4 (01:31:06)
6-5 [sed命令使用] sed-5 (01:04:57)
6-6 [sed命令使用] sed扩展hold-space和pattern-space (26:33)
7-1 [awk命令使用] awk-1 (35:17)
7-2 [awk命令使用] awk-2 (48:21)
7-3 [awk命令使用] awk-3 (46:41)
7-4 [awk命令使用] awk-4 (01:02:05)
8-1 [expect命令使用] ssh服务 (01:11:56)
8-2 [expect命令使用] ssh密钥认证-2 (01:00:09)
8-3 [expect命令使用] ssh服务-3 (48:17)
8-4 [expect命令使用] expect视频-1 (01:08:50)
8-5 [expect命令使用] ssh服务-4 (14:52)
8-6 [expect命令使用] csv文件使用 (30:42)
8-7 [expect命令使用] expect-4 (54:10)
8-8 [expect命令使用] expect视频-2 (01:01:20)
8-9 [expect命令使用] expect-5 (43:24)
9-1 [软件安装-yum和rpm命令使用] yum介绍和rpm的介绍使用 (01:00:21)
9-2 [软件安装-yum和rpm命令使用] rpm的使用-2 (01:12:35)
9-3 [软件安装-yum和rpm命令使用] yum的原理-3 (01:08:39)
9-4 [软件安装-yum和rpm命令使用] 官方yum-本地yum-第3方yum-ftp方式yum-4 (01:13:13)