我有一个可以登录大约 30 对路由器的脚本。该脚本运行命令并将输出保存到文件中,然后移动到下一个路由器,依此类推。
我现在想在每对路由器的文件上运行“差异”,然后“差异”下一对,依此diff rtr_1a rtr_1b
类推diff rtr_2a rtr_2b
。
如何告诉“diff”仅比较特定的文件对,而不需要在多个 diff 语句中手动对名称进行硬编码?
答案1
假设所有文件都被调用rtr_ia
并且rtr_ib
数量i
在 1 到 30 之间:
#!/bin/bash
for (( i = 1; i <= 30; ++i )); do
diff "rtr_${i}a" "rtr_${i}b"
done
要将差异保存到文件中:
#!/bin/bash
for (( i = 1; i <= 30; ++i )); do
diff "rtr_${i}a" "rtr_${i}b" >"rtr_${i}.diff"
done
评论后:
#!/bin/bash
for rtra in *rtr*a; do
rtrb="${rtra%a}b"
diff -- "$rtra" "$rtrb"
done
或者
#!/bin/bash
for rtra in *rtr*a; do
rtrb="${rtra%a}b"
diff -- "$rtra" "$rtrb" >"${rtra}_${rtrb}.diff"
done
...保存到文件。
这将匹配所有prefix-rtrNa
文件名,然后为每个文件名创建相应的prefix-rtrNb
文件名(将从值中${rtra%a}
删除尾随)。然后它会比较这两个文件。a
$rtra