归纳 Bash 管道与重定向、常用命令、awk/sed/grep、变量与条件判断以及脚本模板,覆盖日常运维高频场景,适合写自动化脚本时照着改。
管道与重定向
竖线把前一个命令的标准输出交给后一个;大于号覆盖写、双大于号追加,只收错误用文件描述符二,把错误并回标准输出用二大于与一,tee 能同时显示和写入文件。
grep -n "err" app.log | wc -l
常用命令
文件查找、磁盘占用、进程与归档是日常高频操作,按人类可读容量排序用 sort 的短横 h 参数,按天数筛旧文件用 find 的修改时间参数。打包时记得排除输出文件自身。
find . -name "*.log" -mtime +7
awk / sed / grep
grep 找行、sed 改文本、awk 按列统计,三者常串成一条流水线;awk 用短横 F 指定分隔符,美元一表示第一列,END 块在所有行处理完后执行,适合做求和与计数。
awk -F',' '{s += $3} END {print s}' f
变量与条件
赋值等号两侧不加空格,美元加小括号取命令输出,双方括号做判断,引用变量一律加双引号避免空格被拆成多个词。判断文件是否存在用短横 f,目录用短横 d,比较前先确认变量非空。
if [[ -f "$f" ]]; then echo ok; fi
循环与函数
for 遍历文件列表,while read 逐行处理;函数内用 local 限制变量作用域,失败时返回一让调用方能判断。通配没匹配到文件时会原样留下星号,循环开头先判存在再处理,别对星号动手。
for f in *.log; do echo "$f"; done
脚本模板
开头固定几行:指定解释器、报错即退出、未定义变量报错、管道失败可感知,能挡住大部分低级故障。参数个数先校验,路径一律加引号,错误信息写到标准错误流,别和正常输出混在一起。
#!/usr/bin/env bash
set -euo pipefail