Shell 脚本学习路线 | 26 年最新零基础到精通一条龙(万人收藏⭐️)
编程导航学习网站:学编程、做项目、拿 Offer!
企业高频面试题库:开始刷题,面试遇原题!
精选简历模板大全:1 分钟搞定简历!
AI 资源导航网站:获取最新 AI 黑科技!
1 对 1 模拟面试:随时随地提升面试能力
Shell 脚本求职高频面试题:开始刷题
开篇介绍
Shell 脚本是什么?
Shell 是 Linux/Unix 系统的命令行解释器,Shell 脚本就是由 Shell 命令组成的可执行文件。通过编写 Shell 脚本,我们可以将一系列命令组合起来,实现自动化任务,大大提高工作效率。
Shell 脚本广泛应用于系统管理、自动化运维、数据处理、软件部署等场景。比如自动备份数据库、批量处理文件、定时执行任务、监控系统状态、自动化部署应用等,这些工作都可以通过 Shell 脚本来完成。
为什么要学 Shell 脚本?
对于运维工程师来说,Shell 脚本是必备技能;对于后端开发工程师来说,Shell 脚本能够帮助你快速完成一些自动化任务,提高开发效率。而且 Shell 脚本的学习成本相对较低,语法简单,几天时间就能掌握基础用法。
在 AI 时代,虽然有了很多自动化工具和平台,但 Shell 脚本仍然是最灵活、最高效的自动化方案。而且现在可以使用 AI 工具(比如 ChatGPT、Gemini、DeepSeek)帮你生成 Shell 脚本,大大降低了学习门槛。
学习前提
学习 Shell 脚本需要具备基本的 Linux 命令行知识。如果你还不熟悉 Linux 命令,可以查看 Linux 服务器学习路线。
学习路线图

整体学习建议
1)边学边练:Shell 脚本的学习必须结合实践,要多写脚本、多调试。建议在 Linux 系统或 macOS(内置 Bash)上练习。

或者利用 Shell playground 在线工具 随时随地练习:

2)从简单到复杂:不要一开始就写复杂的脚本,先从简单的任务开始(如打印文本、创建文件),逐步增加复杂度。
3)善用 AI 工具:遇到不懂的命令或错误,可以让 AI 工具(如 ChatGPT)帮你解释和调试。可以到鱼皮的 AI 资源大全 中看看有没有适合你的工具。

4)学习 awk 和 sed:awk 和 sed 是 Shell 脚本中常用的文本处理工具,功能强大,建议重点学习。
5)注意 Shell 的选择:本路线以 Bash 为主,这是 Linux 系统最常用的 Shell。其他 Shell(如 Zsh、Fish)的语法略有不同。
阶段 1:Shell 基础(1-5 天)
学习目标
理解 Shell 脚本的基本概念,掌握 Shell 脚本的编写和执行方法。
知识点
Shell 基础【必学】:
- 什么是 Shell
- 常见的 Shell 类型(Bash、Zsh、Ksh、Csh)
- Shebang(#!/bin/bash)
- 脚本的执行方式(bash script.sh、./script.sh、source script.sh)
- 脚本权限(chmod +x)
注释【必学】:
- 单行注释(#)
- 多行注释(:<<'COMMENT' ... COMMENT)
输出【必学】:
- echo 命令
- printf 命令
输入【必学】:
- read 命令
- 命令行参数($1、$2、$@、$#)
学习重点
1)Shebang(#!/bin/bash)必须放在脚本的第一行,告诉系统使用哪个解释器来执行脚本。
2)脚本执行方式的区别:bash script.sh 会创建新的子进程执行脚本,source script.sh 在当前进程执行脚本,变量会保留。
3)建议养成良好的编码习惯,每个脚本都要添加注释,说明脚本的功能、作者、日期等。
学习资源
示例脚本
▼bash复制代码#!/bin/bash # 第一个 Shell 脚本 # 作者:鱼皮 # 日期:2025-11-15 echo "Hello, Shell!" echo "当前用户:$USER" echo "当前目录:$(pwd)"
阶段 2:变量和参数(1-5 天)
学习目标
掌握 Shell 变量的定义和使用,理解特殊变量的含义。
知识点
变量定义【必学】:
- 变量定义(无空格:name="value")
- 使用变量($name 或 ${name})
- 只读变量(readonly)
- 删除变量(unset)
变量类型【必学】:
- 局部变量
- 环境变量(export)
- Shell 变量
特殊变量【必学】:
- $0:脚本名称
- $1、$2...:位置参数
- $#:参数个数
- $@:所有参数(列表形式)
- $*:所有参数(字符串形式)
- $?:上一条命令的退出状态
- $$:当前进程 ID
字符串操作【建议学】:
- 字符串拼接
- 获取字符串长度(${#string})
- 提取子字符串(${string:start:length})
- 字符串替换(${string/old/new})
数组【建议学】:
- 定义数组(arr=(1 2 3))
- 访问数组元素(${arr[0]})
- 获取数组长度(${#arr[@]})
- 遍历数组
学习重点
1)变量定义时等号两边不能有空格,这是 Shell 的语法规则。name="value" 是正确的,name = "value" 会报错。
2)使用变量时建议加花括号 ${name},这样可以避免歧义,特别是在字符串拼接时。
3)特殊变量非常重要,$? 可以用来判断命令是否执行成功(0 表示成功,非 0 表示失败)。
示例脚本
▼bash复制代码#!/bin/bash # 变量和参数示例 # 定义变量 name="编程导航" age=5 # 使用变量 echo "网站名称:${name}" echo "运营年限:${age}年" # 命令行参数 echo "脚本名称:$0" echo "第一个参数:$1" echo "参数个数:$#" echo "所有参数:$@" # 字符串操作 url="https://www.codefather.cn" echo "URL 长度:${#url}" echo "域名:${url:8}" # 数组 sites=("编程导航" "面试鸭" "SQL自学网") echo "第一个网站:${sites[0]}" echo "网站数量:${#sites[@]}"
阶段 3:流程控制(2-7 天)
学习目标
掌握 Shell 脚本的流程控制语句,能够编写包含条件判断和循环的脚本。
知识点
条件判断【必学】:
- test 命令
[ ]表达式[[ ]]表达式(推荐)- 文件判断(-e、-f、-d、-r、-w、-x)
- 数值比较(-eq、-ne、-gt、-lt、-ge、-le)
- 字符串比较(=、!=、-z、-n)
- 逻辑运算(-a、-o、!)
if 语句【必学】:
- if...then...fi
- if...then...else...fi
- if...then...elif...else...fi
case 语句【必学】:
- case...in...esac
循环语句【必学】:
- for 循环(for i in list; do...done)
- while 循环(while condition; do...done)
- until 循环(until condition; do...done)
- break 和 continue
学习重点
1)推荐使用 [[ ]] 而不是 [ ],[[ ]] 功能更强大,支持正则匹配,而且不需要对变量加引号。
2)文件判断非常常用,如 -f file 判断文件是否存在且为普通文件,-d dir 判断目录是否存在。
3)for 循环可以遍历命令输出、数组、文件列表等,非常灵活。
示例脚本
▼bash复制代码#!/bin/bash # 流程控制示例 # if 语句 age=20 if [[ $age -ge 18 ]]; then echo "已成年" else echo "未成年" fi # case 语句 read -p "请输入你的选择(1-3):" choice case $choice in 1) echo "你选择了选项1" ;; 2) echo "你选择了选项2" ;; 3) echo "你选择了选项3" ;; *) echo "无效选择" ;; esac # for 循环 echo "打印1到5:" for i in {1..5}; do echo $i done # while 循环 echo "倒计时:" count=5 while [[ $count -gt 0 ]]; do echo $count ((count--)) sleep 1 done echo "时间到!" # 遍历文件 echo "当前目录的文件:" for file in *; do if [[ -f $file ]]; then echo "文件:$file" fi done
阶段 4:函数和文件操作(2-7 天)
学习目标
掌握 Shell 函数的定义和使用,学习常用的文件操作和文本处理工具。
知识点
函数【必学】:
- 函数定义(function name() { })
- 函数调用
- 函数参数($1、$2...)
- 函数返回值(return)
文件操作【必学】:
- 读取文件(cat、head、tail、less、more)
- 写入文件(> 覆盖、>> 追加)
- 重定向(标准输入、标准输出、标准错误)
文本处理三剑客【必学,重点】:
- grep:搜索文本
- 基本用法(grep pattern file)
- 正则表达式匹配
- 常用选项(-i 忽略大小写、-v 反向匹配、-n 显示行号、-r 递归搜索)
- sed:文本替换和编辑
- 替换(sed 's/old/new/' file)
- 删除行(sed '/pattern/d' file)
- 插入行(sed 'i\text' file)
- awk:文本分析和处理
- 基本用法(awk '{print $1}' file)
- 内置变量($0 整行、$1第一列、NR行号、NF列数)
- 条件和循环
其他常用命令【建议学】:
- find:查找文件
- xargs:构建命令行
- cut:提取列
- sort:排序
- uniq:去重
- wc:统计行数/单词数/字符数
学习建议
1)grep、sed、awk 被称为 “文本处理三剑客”,是 Shell 脚本中最重要的工具,一定要重点学习。

2)awk 功能非常强大,可以当作一门编程语言来学习。awk 特别适合处理结构化文本(如日志文件、CSV 文件)。
3)sed 主要用于文本替换和编辑,比如批量替换文件内容、删除特定行等。
4)这些工具一般通过管道(|)组合使用,实现复杂的文本处理任务。
学习资源
- Shell 自动化运维实战:完整教程
- 运维三剑客实战:grep、awk、sed
示例脚本
▼bash复制代码#!/bin/bash # 函数和文本处理示例 # 函数定义 function greet() { echo "Hello, $1!" } # 调用函数 greet "鱼皮" # 读取文件并统计行数 if [[ -f "/etc/passwd" ]]; then line_count=$(wc -l < /etc/passwd) echo "/etc/passwd 有 $line_count 行" fi # grep 示例:搜索包含 "root" 的行 echo "搜索 /etc/passwd 中的 root:" grep "root" /etc/passwd # awk 示例:提取第一列 echo "提取 /etc/passwd 的第一列:" awk -F: '{print $1}' /etc/passwd | head -5 # sed 示例:替换文本 echo "hello world" | sed 's/world/Shell/' # 管道组合:统计当前目录的文件数 echo "当前目录的文件数:" ls -l | grep "^-" | wc -l
阶段 5:实战应用(3-10 天)
学习目标
通过实际案例掌握 Shell 脚本的实战技巧,能够编写实用的自动化脚本,比如系统监控、日志分析、自动化部署等场景。
实战案例
现在有 AI 了,其实只要能看懂下面的脚本问题就不大~
案例 1:系统监控脚本
▼bash复制代码#!/bin/bash # 系统监控脚本 echo "========== 系统信息 ==========" echo "主机名:$(hostname)" echo "内核版本:$(uname -r)" echo "运行时间:$(uptime -p)" echo "========== CPU 使用率 ==========" top -bn1 | grep "Cpu(s)" | awk '{print "CPU使用率:" 100-$8 "%"}' echo "========== 内存使用情况 ==========" free -h | grep "Mem" | awk '{print "总内存:" $2 "\n已用内存:" $3 "\n可用内存:" $4}' echo "========== 磁盘使用情况 ==========" df -h | grep "^/dev"
案例 2:自动备份脚本
▼bash复制代码#!/bin/bash # 数据库备份脚本 # 配置 DB_NAME="mydb" DB_USER="root" DB_PASS="password" BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份数据库 echo "开始备份数据库 $DB_NAME..." mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILE # 检查备份是否成功 if [[ $? -eq 0 ]]; then echo "备份成功:$BACKUP_FILE" # 压缩备份文件 gzip $BACKUP_FILE echo "压缩完成:${BACKUP_FILE}.gz" # 删除7天前的备份 find $BACKUP_DIR -name "*.gz" -mtime +7 -delete echo "清理完成" else echo "备份失败!" exit 1 fi
案例 3:批量处理文件
▼bash复制代码#!/bin/bash # 批量重命名图片文件 # 检查参数 if [[ $# -lt 1 ]]; then echo "用法:$0 <目录>" exit 1 fi DIR=$1 if [[ ! -d $DIR ]]; then echo "错误:目录不存在" exit 1 fi # 批量重命名 count=1 for file in $DIR/*.jpg; do if [[ -f $file ]]; then new_name="$DIR/image_$(printf "%03d" $count).jpg" mv "$file" "$new_name" echo "重命名:$file -> $new_name" ((count++)) fi done echo "处理完成,共重命名 $((count-1)) 个文件"
案例 4:日志分析脚本
▼bash复制代码#!/bin/bash # 分析 Nginx 访问日志 LOG_FILE="/var/log/nginx/access.log" if [[ ! -f $LOG_FILE ]]; then echo "错误:日志文件不存在" exit 1 fi echo "========== Nginx 日志分析 ==========" # 统计总访问量 total=$(wc -l < $LOG_FILE) echo "总访问量:$total" # 统计访问最多的 IP echo "访问最多的 IP Top 10:" awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -rn | head -10 # 统计访问最多的 URL echo "访问最多的 URL Top 10:" awk '{print $7}' $LOG_FILE | sort | uniq -c | sort -rn | head -10 # 统计状态码分布 echo "HTTP 状态码分布:" awk '{print $9}' $LOG_FILE | sort | uniq -c | sort -rn
学习建议
1)实战案例要结合实际需求,不要为了写脚本而写脚本。思考工作中有哪些重复性的任务可以用脚本自动化。
2)脚本要考虑错误处理,如检查文件是否存在、命令是否执行成功、参数是否正确等。
3)复杂的脚本要添加注释,方便自己和他人理解。
4)定时执行脚本可以使用 cron 定时任务,如每天凌晨 2 点执行备份脚本。
求职备战
学习建议
Shell 脚本一般不是单独的面试科目,而是作为 Linux 运维或后端开发岗位的一部分来考察。面试时可能会要求现场编写简单的 Shell 脚本,或者询问 Shell 脚本的相关知识。
1)准备常用脚本:准备几个常用的 Shell 脚本案例(如系统监控、自动备份、日志分析),能够快速说出脚本的功能和实现思路。
2)掌握文本处理三剑客:grep、sed、awk 是面试的高频考点,要能够熟练使用。
3)理解脚本的执行流程:要理解 Shell 脚本的执行过程,如 Shebang 的作用、变量的作用域、管道的工作原理等。
经典面试题
- Shell 脚本的第一行 #!/bin/bash 有什么作用?
- source、sh、bash、./ 执行脚本有什么区别?
- $# 和 $@ 有什么区别?
- 如何判断一个文件是否存在?
- 如何在 Shell 脚本中捕获命令的输出?
- grep、sed、awk 各有什么特点?如何选择?
- 如何在 Shell 脚本中实现异常处理?
面试题库

求职资源
- 鱼皮的保姆级求职指南:从简历到面试的完整指南
- 编程导航的求职干货分享:求职经验和技巧
持续学习资源
学习网站
- ⭐ 编程导航:学习路线、项目教程、面试题
- Linux 学习路线:完整的 Linux 学习路线
技术博客
- Linux Journal:Linux 和 Shell 技术
- Red Hat Blog:Red Hat 系统管理
- Ubuntu Blog:Ubuntu 官方博客
Shell 脚本库
- awesome-shell:Shell 资源大全
- pure-bash-bible:Bash 技巧集合
总结
Shell 脚本是 Linux/Unix 系统管理和自动化运维的重要工具,虽然语法相对简单,但功能非常强大。通过编写 Shell 脚本,我们可以将重复性的工作自动化,大大提高工作效率。
学习 Shell 脚本不需要深入学习所有特性,掌握基础语法、流程控制、文本处理三剑客(grep、sed、awk)就足够应对大部分场景。重要的是要多写脚本、多实践,结合实际工作需求来学习。
在 AI 时代,虽然有了很多自动化工具,但 Shell 脚本仍然是最灵活、最高效的自动化方案。而且现在可以使用 AI 工具帮你生成和调试 Shell 脚本,学习起来更加轻松。
希望这份学习路线能够帮助大家快速掌握 Shell 脚本,提升工作效率。
加油小伙伴们 💪🏻!

程序员必备资源
1)程序员学习交流圈:极客教程、实战项目、求职宝典
2)程序员面试八股文:实习/校招/社招高频考点、企业真题解析
3)程序员写简历神器:专业模板、丰富例句、直通面试
4)AI 知识资源大全:前沿技术、最新 AI 资讯、提示词大全
5)1 对 1 模拟面试:实习/校招/社招面试拿 Offer 必备
