Shell 适合编排系统命令和轻量自动化,不适合复杂数据模型。原笔记中的空格清理、sed、IP/UUID 提取、网卡、磁盘、MySQL 主从与 SR-IOV 脚本可以统一为一套安全写法。
## 脚本基线
```bash
#!/usr/bin/env bash
set -Eeuo pipefail
IFS=$'
'
trap 'echo "failed at line $LINENO" >&2' ERR
```
变量始终加引号,使用 [[ ... ]],临时目录用 mktemp -d 并 trap 清理。破坏性操作必须验证参数非空、路径和设备属于预期范围。
## 文本处理
```bash
sed 's/[[:space:]]//g' input.txt
sed -E 's/[0-9]+//g' input.txt
awk -F: 'NF >= 3 {print $1,$3}' /etc/passwd
grep -Eo '([0-9]{1,3}.){3}[0-9]{1,3}' file.txt
grep -Eio '[0-9a-f]{8}-[0-9a-f-]{27}' file.txt
```
正则找到的字符串不一定是合法 IP/UUID。重要数据应再用 Python、ipcalc 或应用 API 校验。解析 JSON 使用 jq,避免 grep 表格输出。
## 批量网络检查
```bash
while IFS= read -r host; do
[[ -z "$host" || "$host" == #* ]] && continue
if ping -c 1 -W 2 "$host" >/dev/null 2>&1; then
printf '%s OK
' "$host"
else
printf '%s FAIL
' "$host"
fi
done < hosts.txt
```
Ping 失败不代表服务不可用,可再用 nc -zvw2 host port 或 HTTP 健康检查。控制并发,避免把巡检变成扫描攻击。
## 自动化云与网卡操作
调用 OpenStack 等 CLI 时使用 -f value -c ID 或 JSON 输出,检查返回码与唯一结果。先创建资源清单,再逐项执行;为每个创建动作记录 ID,失败时只回滚本次产生的资源。密码、Token 和固定内部 IP 不写进脚本。
## MySQL 主从巡检
脚本只做状态采集,不自动跳过复制错误:检查 Replica_IO/SQL 状态、GTID、延迟、错误和磁盘。凭证使用受保护的 login-path/option file。发现异常输出证据并告警,由明确流程处置。
## Windows 磁盘信息
跨平台场景优先调用 PowerShell 结构化输出:
```powershell
Get-Volume | Select DriveLetter,FileSystemLabel,Size,SizeRemaining | ConvertTo-Json
```
## 质量检查
- bash -n script.sh 语法检查。
- ShellCheck 静态分析。
- Bats 或临时环境测试。
- 日志包含时间、目标和结果,但不包含 Secret。
- 支持 dry-run、limit、超时、重试上限和幂等。
当脚本超过几百行、需要复杂并发/事务/数据解析时,应迁移到 Python、Ansible 或专用 SDK。