Skip to content

🖥️ 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/容器管理、部署脚本

开发环境搭建

  1. Linux/Mac 系统自带 Bash
  2. Windows 用户:安装 WSL2 或 Git Bash
  3. 检查版本:bash --version
  4. 编辑器:VS Code + ShellCheck + Bash IDE 扩展
  5. 代码检查:shellcheck script.sh

学习路线

  1. 入门阶段:基本命令 → 变量和参数 → 条件判断 → 循环
  2. 进阶阶段:数组 → 字符串操作 → 函数 → 信号处理
  3. 实战阶段:系统管理脚本 → 自动化部署 → CI/CD
  4. 高级阶段:性能优化 → 安全编程 → 复杂管道编排

参考资源


返回首页 | 查看所有语言

编程语言技术文档