文章背景图

Shell 脚本实战与安全规范:文本处理、IP/UUID 提取、批量网络检查和自动化

2026-07-25
4
-
- 分钟

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。

原创

Shell 脚本实战与安全规范:文本处理、IP/UUID 提取、批量网络检查和自动化

评论交流

文章目录