
Shell 从入门到精通零基础打造自己的命令行解释器摘要本文是一篇全面系统的 Shell 编程教程从零基础入门到高手进阶涵盖 Shell 基础语法、核心特性、文本处理、实战案例并手把手教你实现一个功能完整的 Shell 解释器。文章包含大量可运行的代码示例每段代码都有详细注释和讲解适合编程新手和技术人员系统学习 Shell 编程。本文特色保姆级代码讲解每行代码都有详细说明完整的 Shell 解释器实现支持管道、重定向、内置命令、变量替换等每个函数都有详细的设计思路和实现细节完整的测试用例和测试脚本通过本文你将掌握 Shell 脚本编写、系统自动化、命令行工具使用等核心技能并深入理解 Shell 解释器的工作原理最终能够独立实现一个简易但功能完整的 Shell 解释器。1、Shell 入门基础1.1、什么是 ShellShell 是一个命令行解释器它为用户提供了一个与操作系统内核交互的接口。简单来说Shell 就是你输入命令后负责解释并执行这些命令的程序。Shell 的作用接收用户输入的命令解释命令并调用相应的程序显示执行结果提供脚本编程能力常见的 Shell 类型bashBourne Again ShellLinux 默认 Shell功能最强大shBourne Shell最早的 Unix ShellzshZ Shell功能丰富的现代 ShellfishFriendly Interactive Shell用户友好的交互式 Shellcmd.exeWindows 命令行解释器PowerShellWindows 强大的脚本工具1.2、第一个 Shell 脚本让我们从最简单的 “Hello World” 开始#!/bin/bash# # 文件名hello.sh# 描述第一个 Shell 脚本# 作者Lenyiin# 创建时间2026-03-16# # 代码讲解 # echo 是最基本的输出命令# 作用将文本内容打印到标准输出通常是终端# 语法echo [选项] [字符串]echoHello, World!# 双引号内的内容会被解析可以包含变量和特殊字符echo欢迎来到 Shell 编程的世界# $(command) 是命令替换语法# 作用执行命令并将输出结果替换到当前位置# 下面这行代码会先执行 date 命令然后将日期输出echo今天是$(date)# whoami 命令显示当前登录用户名echo当前用户$(whoami)# pwd 命令显示当前工作目录Print Working Directoryecho当前目录$(pwd)运行方法# 方法 1直接执行需要执行权限# chmod 是 change mode 的缩写用于修改文件权限# x 表示添加执行权限executechmodx hello.sh ./hello.sh# 方法 2通过 bash 解释器执行不需要执行权限bashhello.sh# 方法 3通过 sh 执行shhello.sh# 方法 4使用 source 或点号在当前 Shell 环境中执行sourcehello.sh# 或.hello.sh输出结果Hello, World! 欢迎来到 Shell 编程的世界 今天是Mon Mar 16 17:45:00 CST 2026 当前用户Lenyiin 当前目录/home/Lenyiin代码详解#!/bin/bash- 称为 Shebang 或 Hashbang#是注释符号!表示这是一个特殊指令/bin/bash是 bash 解释器的路径作用告诉系统用哪个解释器执行脚本系统会读取这行然后调用指定的解释器来运行脚本#- 注释符号注释内容不会被执行用于说明代码功能提高可读性建议每个脚本都写上文件名、描述、作者等信息echo- 输出命令用于打印文本到标准输出常用选项-n不输出末尾的换行符-e启用转义字符如\n、\t 等$(command)- 命令替换执行命令并将结果替换到当前位置等价于反引号command但推荐用$()可以嵌套使用$(echo $(date))date- 日期命令显示当前日期和时间常用格式date %Y-%m-%d %H:%M:%Swhoami- 用户命令显示当前用户名等价于id -unpwd- 目录命令显示当前工作目录Print Working Directory 的缩写1.3、Shell 脚本的执行权限在 Linux/Unix 系统中脚本文件需要执行权限才能直接运行#!/bin/bash# # 文件名permission_demo.sh# 描述演示文件权限管理# # 查看文件权限 # ls -l 以长格式列出文件信息# 输出格式-rwxr-xr-x 1 user group size date name# 第一位文件类型-普通文件d 目录l 链接# 第 2-4 位所有者权限r 读w 写x 执行# 第 5-7 位组用户权限# 第 8-10 位其他用户权限ls-lpermission_demo.sh# 添加执行权限 # chmod 是 change mode 的缩写# 方法 1符号模式chmodx permission_demo.sh# 给所有用户添加执行权限chmodux permission_demo.sh# 给所有者user添加执行权限chmodgx permission_demo.sh# 给组用户group添加执行权限chmodox permission_demo.sh# 给其他用户other添加执行权限chmodax permission_demo.sh# 给所有用户all添加执行权限# 方法 2数字模式# 权限数字r4, w2, x1# 755 421 (rwx) 41 (r-x) 41 (r-x)# 所有者可读写执行 组用户可读执行 其他用户可读执行chmod755permission_demo.sh# 644 42 (rw-) 4 (r--) 4 (r--)# 所有者可读写 组用户只读 其他用户只读chmod644permission_demo.sh# 执行脚本 # ./ 表示当前目录./permission_demo.sh# 移除执行权限 chmod-xpermission_demo.sh权限数字详解数字二进制权限说明0000—无权限1001–x只执行2010-w-只写3011-wx写 执行4100r–只读5101r-x读 执行6110rw-读 写7111rwx读 写 执行常见权限组合755- 可执行脚本、程序644- 普通文件、配置文件600- 私密文件只有所有者可读写777- 完全开放不推荐有安全风险1.4、Shell 的历史与交互模式交互式 Shell# 直接在终端输入命令执行# $ 是 Shell 提示符表示等待用户输入$echoHelloHello $ls-la# 列出当前目录所有文件包括隐藏文件$pwd/home/lenyi非交互式 Shell脚本模式# 将命令写入文件后执行$bashscript.sh# 脚本执行完毕后Shell 会退出# 适合自动化任务、批处理查看 Shell 历史# history 命令显示历史命令列表# 每行格式编号 命令history# 查看最近 10 条历史history10# 清空历史命令history-c# 搜索历史命令配合 grep# | 是管道符号将前一个命令的输出作为后一个命令的输入history|grepgit# 使用 CtrlR 搜索历史交互式# 按 CtrlR然后输入关键词会显示匹配的历史命令2、变量与参数详解