别把它想得太玄乎。Linux Shell 脚本编程,本质上就是你把平时在终端里一条条敲的命令,提前写进一个文件里,让机器按顺序、按条件、按循环去自动执行。我见过太多人学这个,要么卡在语法细节里出不来,要么觉得“反正能敲命令就行”一直没跨过写脚本这道坎。这篇文章我尽量讲实在的,从最基础的思路到能落地的实战写法,按我自己的学习路径和带人经验来拆一遍,希望能帮你把这条学习曲线拉直一点。
1. 项目概述与整体学习思路拆解
1.1 学Shell脚本到底在学什么
Shell脚本的学习,表面看是学语法,实际上是在学三件事:第一件,把Linux常用命令用熟;第二件,理解进程、文件描述符、环境变量这些操作系统概念;第三件,建立“用程序逻辑组织命令”的思维方式。三件事缺一不可。
很多人买了一大本《Linux命令行与Shell脚本编程大全》,翻到第三十章还在看命令参数,真正自己写脚本的时候还是无从下手,原因就是他把这三件事孤立着学了。命令背了一堆,不知道什么时候组合;概念看了一堆,不知道和命令行有什么关系;逻辑学了一堆,一遇到真实文件名带空格、路径带中文就懵。
我建议换一个思路:不要按命令字典的顺序学,而是按“我要完成什么任务”的顺序学。比如“我要把某个目录下所有log文件按日期归档”,这个任务会迫使你去用find、grep、date、tar、循环、变量,学完这个任务,命令和逻辑就自然长在一起了。
1.2 这份学习指南适合谁、能解决什么问题
如果你是运维工程师、后端开发、测试工程师,或者正在准备Linux相关岗位面试,这份指南适合你。如果你只是偶尔用一下Linux桌面,平时不碰命令行,可以先收藏,等真需要批量处理文件时再回来看。
这篇文章对应的是一个“从入门到实战”的完整路径:先建立认知框架,再掌握高频命令的深度用法,然后通过真实案例把脚本的骨架搭起来,最后讲清楚常见问题和进阶方向,同时也整理了一些面试和岗位技能相关的内容。你不需要一次性读完,建议按章节来,每一章动手敲一遍,效果比通读三遍好得多。
提示:学Shell最忌讳的就是“只看不敲”。你哪怕照着文章把命令原封不动打一遍,收获都比读十遍大。一定要自己建目录、自己造垃圾文件去练。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高频命令与核心概念:先解决“工具不熟”的问题
2.1 20个高频命令,按场景分组比按字母背高效十倍
我不建议拿命令大全从头背。按场景分组最快。我整理了一份高频命令清单,你可以把它当成“最小可用集”,先用熟,再扩展。
| 场景 | 命令家族 | 核心用途 |
|---|---|---|
| 文件操作 | cd、ls、cp、mv、rm、ln | 移动、复制、删除、链接,最基础 |
| 内容查看 | cat、less、head、tail | 查看文件内容,tail -f 几乎是日志排查标配 |
| 文本处理 | grep、sed、awk、cut、sort、uniq | 搜索、替换、切片、排序去重 |
| 查找定位 | find、locate、which、whereis | 按条件找文件、找命令位置 |
| 权限与用户 | chmod、chown、useradd、usermod | 权限控制、用户管理 |
| 进程与系统 | ps、top、kill、df、du、free | 看进程、看资源、清进程 |
| 传输与网络 | scp、rsync、curl、wget | 文件传输、HTTP请求 |
| 打包压缩 | tar、zip、gzip | 归档与压缩 |
初学阶段,你先别碰sed和awk的复杂写法,能把grep、cut、sort、uniq用顺,就已经能解决很多实际问题了。sed和awk等遇到批量文本修改的需求再学,效率更高,因为有了需求驱动,你记参数会快很多。
2.2 环境变量、通配符、引号:这三个是脚本的隐形地基
命令本身好背,但脚本里最容易出错的反而是环境变量、通配符和引号的用法。
环境变量是脚本里传递信息的通道。你执行一个脚本时,shell会先启动一个子进程,这个子进程带着一份环境变量副本。你在脚本里export一个变量,它会影响这个脚本再启动的子进程,但不会影响你当前的终端。这个理解很重要,很多人写脚本时发现变量设置了但外部拿不到,就是因为没搞清楚父子进程的环境变量隔离。查看变量用echo $HOME,列出全部环境变量用env。
通配符和正则不是一回事,这个观念要尽早建立。通配符是shell在解析命令时做的路径扩展,比如*.txt只匹配文件名;而正则是文本匹配规则,比如grep '^abc'匹配行首。Shell里给find或grep传正则时加不加引号,结果完全不一样,这一点在命令行里踩坑极多。
引号更关键。双引号会展开变量,但不会通配;单引号完全字面量;反引号会被当成命令替换。你写rm -rf "$dir"和rm -rf $dir,前者安全,后者当dir为空时直接把当前目录给删了。不要觉得这是小事,这是脚本面试里最经典的坑。
2.3 命令找不到或权限被拒绝:先分清shell层的三类报错
实操中我经常收到这种问题:“明明装了软件,执行时却提示command not found”,“脚本文件写好了,执行时提示Permission denied”。
这两种报错要分开看。command not found是shell在PATH路径下找不到这个可执行文件,解决方向是检查软件是否真的安装了、安装路径是否在PATH里。Permission den
