9.7 管道与高级技巧

这一章讲述管道的原理、常用与之配合的工具以及一些执行顺序控制技巧。

命令执行顺序控制

  • 顺序执行:cmd1; cmd2; cmd3
  • 有条件执行:
    • cmd1 && cmd2(前者成功则执行后者)。
    • cmd1 || cmd3(前者失败则执行后者)。
  • $? 存储上一个命令的退出状态,0 表示成功。

示例:

command -v git >/dev/null && git --help   # 如果存在 git,则显示帮助

还可以用 &&/|| 构建简单的错误处理:

mkdir /opt/foo && echo "创建成功" || echo "失败"

管道(|)

管道将前一个进程的标准输出直接作为下一个进程的标准输入。

默认情况下管道只传递 stdout,stderr 会绕开;要同时传递 stderr,可先将其重定向到 stdout,例如:

cmd1 2>&1 | cmd2

第一个示例

ls -al /etc | less

常用配合命令

切割 cut

  • -d 指定分隔符,配合 -f 取字段
  • -c 指定字符范围

示例:

cat /etc/passwd | cut -d ':' -f 1,6
cat /etc/passwd | cut -c 1-10

搜索 grep

grep [-acinv] [--color=auto] 'pattern' file

常用选项:

  • -n 输出行号
  • -v 反向匹配

排序与统计

sortuniqwc 是管道链中的常客。

sort

选项如 -n 数字排序、-r 反向、-k 指定字段。

uniq

uniq -c 计数,常与 sort 连用。

wc

wc -l 统计行数。

示例:

last | cut -d ' ' -f 1 | sort | uniq -c

为了同时查看并保存中间输出,可以使用 tee 命令:

ps aux | tee procs.txt | grep ssh

tee 会将数据分发到文件和下一个管道中,非常适合调试。

由于篇幅关系,本章的高级技巧示例主要演示管道命令的组合使用,可根据具体需求查阅各命令的手册。

results matching ""

    No results matching ""