type
status
date
slug
summary
tags
category
icon
password

Bash 是什么

Bash(Bourne Again SHell)是 Unix/Linux 系统上最常用的命令行解释器(Shell)。它的名字是个双关语——既是对 1979 年原版 Bourne Shell(sh)的"重生"(born again),也暗示它是对 sh 的超集。
Shell 本质上就是一个程序,它读取你输入的命令,交给操作系统内核执行,再把结果返回给你。Bash 是 macOS(Catalina 之前)和大多数 Linux 发行版的默认 Shell。

核心概念

1. 交互式 vs 脚本模式

Bash 有两种用法:
交互式:你在终端里一行一行敲命令,实时执行。
脚本模式:把一堆命令写进 .sh 文件,批量执行。这是 Bash 的精髓所在。
#!/bin/bash 这行叫 shebang,必须在第一行。

2. 变量

重要区别

3. 条件判断

[ ]test 命令的语法糖。[[ ]] 是 Bash 扩展版,支持正则、更安全,推荐优先用 [[ ]]
常用判断操作符:
类型
操作符
含义
数字比较
-eq -ne -gt -lt -ge -le
等于、不等、大于、小于...
字符串
= != -z -n
相等、不等、为空、非空
文件
-f -d -e -r -w -x
是文件、是目录、存在、可读、可写、可执行

4. 循环


5. 函数


6. 管道与重定向

这是 Unix 哲学的核心——小工具组合成强大的流水线。

7. 特殊变量


8. 数组


实用技巧

set 命令(写脚本必备)

字符串操作


与你技术栈的类比

如果你熟悉 Java,可以这样理解:
  • Bash 脚本 ≈ Java 的 main 方法,顺序执行
  • Bash 函数 ≈ Java 方法,但参数传递靠位置而非命名
  • Bash 管道 ≈ Java Stream API 的链式调用
  • Bash exit code ≈ Java 异常机制(0 = 成功,非0 = 失败)
作为全栈开发者,Bash 最直接的用途是写自动化脚本:部署脚本、CI/CD 流水线、日志分析、批量文件处理。你在配置 MCP server、Claude Code CLI 这些工具时,背后大量用到 Bash。

常见陷阱

变量有空格时不加引号
数字比较用了字符串操作符
忘记 local:函数内的变量默认是全局的,会意外污染外部变量。