├─ **1. 预定义变量**
│ ├─ `$*`
│ │ └─ 所有外部参数(合并为单字符串,空格分隔)
│ ├─ `$@`
│ │ └─ 所有外部参数(保持独立参数,空格分隔)
│ ├─ `$#`
│ │ └─ 参数个数(类似 `argc`)
│ ├─ `$$`
│ │ └─ 当前终端进程号
│ └─ `$?`
│ └─ 上一条命令返回值(0=成功,非0=失败)
├─ **2. 特殊符号**
│ ├─ `readonly`
│ │ └─ 定义只读变量(格式:`readonly var=value`)
│ ├─ `unset`
│ │ └─ 取消变量定义(不可取消只读变量)
│ └─ `local`
│ └─ 定义局部变量(格式:`local var=value`)
├─ **3. 命令置换**
│ ├─ 作用
│ │ └─ 将命令输出赋值给变量
│ ├─ 格式
│ │ ├─ `变量=$(命令)`
│ │ └─ `变量=\`命令\``
│ └─ 示例
│ ├─ `uid=$(id -u)`
│ └─ `files=$(ls *.sh)`
├─ **4. 输入输出**
│ ├─ **输出 `echo`**
│ │ ├─ 基础格式:`echo "字符串"`
│ │ ├─ 选项
│ │ │ ├─ `-n`:取消换行
│ │ │ └─ `-e`:启用转义符(如 `\t`、`\n`)
│ │ └─ 变量输出示例
│ │ └─ `echo "a=$a, b=$b"`
│ └─ **输入 `read`**
│ ├─ 格式:`read [选项] 变量`
│ ├─ 常用选项
│ │ ├─ `-p "提示"`:显示提示语
│ │ ├─ `-n 数字`:限制输入字符数
│ │ ├─ `-t 秒数`:超时自动结束
│ │ ├─ `-s`:隐藏输入内容
│ │ └─ `-a 数组`:输入数组
│ └─ 示例
│ ├─ `read -p "输入姓名:" name`
│ └─ `read -a arr -p "输入数组:"`
├─ **5. 字符串操作**
│ ├─ **长度计算**
│ │ └─ `${#str}`
│ ├─ **连接**
│ │ └─ `c="$a$b"`
│ ├─ **剪切**
│ │ ├─ 正向
│ │ │ ├─ `${str:m}`:从位置 `m` 截取到末尾
│ │ │ └─ `${str:m:n}`:从 `m` 截取 `n` 个字符
│ │ └─ 反向
│ │ ├─ `${str:0-m}`:倒数第 `m` 位截取到末尾
│ │ └─ `${str:0-m:n}`:倒数第 `m` 位截取 `n` 字符
│ └─ **截取(分隔符)**
│ ├─ `${str#*.}`:左→右第一个 `.` 后内容
│ ├─ `${str##*.}`:左→右最后一个 `.` 后内容
│ ├─ `${str%.*}`:右→左第一个 `.` 前内容
│ └─ `${str%%.*}`:右→左最后一个 `.` 前内容
├─ **6. 数组**
│ ├─ **定义**
│ │ ├─ 普通数组:`arr=(1 2 3)`
│ │ └─ 稀疏数组:`arr=([0]=a [4]=b)`
│ ├─ **引用**
│ │ ├─ 单个元素:`${arr[0]}`
│ │ └─ 全部元素:`${arr[*]}` 或 `${arr[@]}`
│ ├─ **长度**
│ │ ├─ 数组长度:`${#arr[*]}`
│ │ └─ 元素长度:`${#arr[0]}`
│ └─ **操作**
│ ├─ 追加:`arr+=(4)`
│ └─ 拼接:`c=(${a[@]} ${b[@]})`
├─ **7. 运算符**
│ ├─ **`(())`**
│ │ ├─ 支持算术、关系、逻辑、条件运算
│ │ └─ 示例
│ │ ├─ `((sum = a + b))`
│ │ └─ `((max = a > b ? a : b))`
│ ├─ **`$[]`**
│ │ └─ 同 `(())`,需用 `$` 取值(如 `sum=$[a + b]`)
│ ├─ **`let`**
│ │ ├─ 格式:`let "sum=a+b"`
│ │ └─ 支持自增:`let a++`
│ └─ **`expr`**
│ ├─ 字符串操作
│ │ ├─ `match`:匹配子串长度
│ │ ├─ `substr`:截取子串
│ │ ├─ `index`:查找字符位置
│ │ └─ `length`:计算长度
│ └─ 示例:`value=$(expr length "$str")`
└─ **8. 综合应用**
├─ **示例1:秒转时分秒**
│ ├─ 输入:`read -p "输入秒数:" total`
│ └─ 计算:
│ ├─ `((h = total / 3600))`
│ ├─ `((m = total % 3600 / 60))`
│ └─ `((s = total % 60))`
└─ **示例2:最大值查找**
└─ 输入计算:`max=$((a > b ? (a > c ? a : c) : (b > c ? b : c)))`