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:函数内的变量默认是全局的,会意外污染外部变量。Catalog