编程导航学习网站:学编程、做项目、拿 Offer!
企业高频面试题库:开始刷题,面试遇原题!
精选简历模板大全:1 分钟搞定简历!
AI 资源导航网站:获取最新 AI 黑科技!
1 对 1 模拟面试:随时随地提升面试能力
Shell 脚本求职高频面试题:开始刷题
Shell 是 Linux/Unix 系统的命令行解释器,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)的语法略有不同。
理解 Shell 脚本的基本概念,掌握 Shell 脚本的编写和执行方法。
Shell 基础【必学】:
注释【必学】:
输出【必学】:
输入【必学】:
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)"
掌握 Shell 变量的定义和使用,理解特殊变量的含义。
变量定义【必学】:
变量类型【必学】:
特殊变量【必学】:
字符串操作【建议学】:
数组【建议学】:
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[@]}"
掌握 Shell 脚本的流程控制语句,能够编写包含条件判断和循环的脚本。
条件判断【必学】:
[ ] 表达式[[ ]] 表达式(推荐)if 语句【必学】:
case 语句【必学】:
循环语句【必学】:
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
掌握 Shell 函数的定义和使用,学习常用的文件操作和文本处理工具。
函数【必学】:
文件操作【必学】:
文本处理三剑客【必学,重点】:
其他常用命令【建议学】:
1)grep、sed、awk 被称为 “文本处理三剑客”,是 Shell 脚本中最重要的工具,一定要重点学习。

2)awk 功能非常强大,可以当作一门编程语言来学习。awk 特别适合处理结构化文本(如日志文件、CSV 文件)。
3)sed 主要用于文本替换和编辑,比如批量替换文件内容、删除特定行等。
4)这些工具一般通过管道(|)组合使用,实现复杂的文本处理任务。
▼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
通过实际案例掌握 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 脚本是 Linux/Unix 系统管理和自动化运维的重要工具,虽然语法相对简单,但功能非常强大。通过编写 Shell 脚本,我们可以将重复性的工作自动化,大大提高工作效率。
学习 Shell 脚本不需要深入学习所有特性,掌握基础语法、流程控制、文本处理三剑客(grep、sed、awk)就足够应对大部分场景。重要的是要多写脚本、多实践,结合实际工作需求来学习。
在 AI 时代,虽然有了很多自动化工具,但 Shell 脚本仍然是最灵活、最高效的自动化方案。而且现在可以使用 AI 工具帮你生成和调试 Shell 脚本,学习起来更加轻松。
希望这份学习路线能够帮助大家快速掌握 Shell 脚本,提升工作效率。
加油小伙伴们 💪🏻!

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