🖥️ Bash
概述:Bash(Bourne Again Shell)是 GNU 项目开发的标准 Shell,也是大多数 Linux 发行版的默认 Shell。它兼容 sh 语法并增加了丰富的扩展功能,是 Shell 脚本编程的事实标准。
概述
Bash 属于 脚本 & 运维语言 分类。Bash 是 Shell 的一种具体实现,在 sh 基础上增加了命令历史、Tab 补全、数组、关联数组等高级特性。
语言特点
- sh 兼容:完全兼容 POSIX sh 语法,脚本可移植性强
- 交互增强:命令历史、Tab 补全、别名(alias)
- 数组支持:支持索引数组和关联数组(字典)
- 进程管理:作业控制、子 Shell、进程替换
- 广泛预装:几乎所有 Linux 和 macOS 系统都自带 Bash
Hello World
bash
#!/bin/bash
echo "Hello, World!"基础语法
数组
bash
# 索引数组
fruits=("Apple" "Banana" "Cherry")
echo "${fruits[0]}" # Apple
echo "${fruits[@]}" # 所有元素
echo "${#fruits[@]}" # 元素个数
# 遍历数组
for fruit in "${fruits[@]}"; do
echo "$fruit"
done
# 关联数组(字典)
declare -A person
person[name]="Alice"
person[age]=30
echo "${person[name]} is ${person[age]}"字符串操作
bash
str="Hello, Bash!"
# 字符串长度
echo "${#str}"
# 子字符串
echo "${str:0:5}" # Hello
echo "${str:7}" # Bash!
# 替换
echo "${str/Bash/World}" # Hello, World!
# 大小写转换
echo "${str^^}" # HELLO, BASH!
echo "${str,,}" # hello, bash!高级特性
bash
# Here Document
cat << EOF
多行文本内容
变量: $USER
EOF
# 进程替换
while read line; do
echo "Line: $line"
done < <(grep "pattern" file.txt)
# 命令分组
{
echo "Step 1"
echo "Step 2"
} > output.txt
# 子 Shell
(cd /tmp && ls)
# 信号处理
trap 'echo "Interrupted!"; exit 1' INT实用脚本模式
bash
# 严格模式(推荐)
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# 参数解析
while getopts "u:p:h" opt; do
case $opt in
u) USER="$OPTARG" ;;
p) PASS="$OPTARG" ;;
h) echo "Usage: $0 -u user -p pass"; exit 0 ;;
*) exit 1 ;;
esac
done应用领域
- Linux 系统管理:系统管理自动化脚本
- 开发工具链:编译构建和测试脚本
- 文本处理:sed、awk 数据处理
- 批量文件操作:文件管理和归档
- 网络运维:网络监控和诊断脚本
- DevOps:Docker/容器管理、部署脚本
开发环境搭建
- Linux/Mac 系统自带 Bash
- Windows 用户:安装 WSL2 或 Git Bash
- 检查版本:
bash --version - 编辑器:VS Code + ShellCheck + Bash IDE 扩展
- 代码检查:
shellcheck script.sh
学习路线
- 入门阶段:基本命令 → 变量和参数 → 条件判断 → 循环
- 进阶阶段:数组 → 字符串操作 → 函数 → 信号处理
- 实战阶段:系统管理脚本 → 自动化部署 → CI/CD
- 高级阶段:性能优化 → 安全编程 → 复杂管道编排
参考资源
- Bash 官方手册 - GNU Bash Reference Manual
- Bash Hackers Wiki - Bash 高级技巧
- ShellCheck - 在线代码检查工具